2013-12-15 119 views
2

我在多维数组中有很长的字符串。我一直试图找出一种方法,用"\n"替换每个字符串中的每个第6个空格,这将导致它基本按下输入。如何在字符串中每6个空格添加一个“ n”?

示例:
orginalString =“我想在此之后放入第六个空格”;

FormatedString =“我希望把进入后\ n的这第六空间”

这是我走到这一步。我可能完全错了。

public static void FormatArray(String c) { 
    int counter = 0; 
    for (int i = 0; i < c.length(); i++) { 
     if (c.charAt(i) == ' ') { 
      counter++; 
     } 
     if (counter == 6) { 
      counter = 0; 
      for (int j = 0; j < Variables.getCards().length; j++) { 
       StringBuilder string = new StringBuilder(
                Variables.getCards()[j][1]); 
       string.setCharAt(i, '\n'); 
       System.out.println(string); 
      } 
     } 
    } 
} 

回答

3

这里有一个在线解决方案:

str = str.replaceAll("(\\S+\\s+){6}", "$0\n"); 

更换期限$0是整个比赛,所以这将放回匹配加一个换行符。

如果正则表达式不符合你的喜好就改变它。例如,如果你想以换行符替换第六空间(S),从捕获排除尾随空格:

str = str.replaceAll("((\\S+\\s+){5}\\S+)\\s+", "$1\n"); 
1

我会做它像这样

// given a String str, replace every sixth space with " \n " 
public static String formatString(String str) { 
    if (str == null) {       // Handle null. 
    return null; 
    } 
    StringBuilder sb = new StringBuilder(); // An output buffer. 
    int count = 0; 
    for (char ch : str.toCharArray()) {  // loop over the characters. 
    if (ch == ' ') {       // test for space. 
     count++; 
    } 
    if (count == 6) {      // every sixth space. 
     count = 0; 
     sb.append(" \n"); 
    } 
    sb.append(ch); 
    } 
    return sb.toString();      // return the string. 
} 

// Test it. 
public static void main(String[] args) { 
    String originalString = "i want to put enter after the sixth space of this"; 
    String formattedString = "i want to put enter after \n the sixth space of this"; 
    if (formatString(originalString).equals(
     formattedString)) { 
    System.out.println("Yes"); 
    } else { 
    System.out.println("No"); 
    } 
} 

当我运行上面,我得到的输出 -

Yes 
0

你说的很正确。我建议如下:

public static String formatStr(String a){ 
    if(a==null) return null; 
    String newStr=""; 
    int len=a.length(); 
    int counter=0; 
    for(int i=0;i<len;i++){ 
     newStr+=a.charAt(i); 
     if (a.charAt(i) == ' ')counter++; 

     if (counter == 6){ 
      counter=0; 
      newStr+="\n"; 
      //System.out.println(string); 
     } 
    } 
    return newStr; 
} 

然后,你可以调用formatStr(无论),你会得到返回的字符串。

0

您可以使用下面的正则表达式:

String pattern = "(\\S*\\s){6}"; 
    String testString = "This is just a regular test. This is just a regular test. This is just a regular test."; 

    Pattern p = Pattern.compile(pattern); 
    Matcher matcher = p.matcher(testString); 
    StringBuilder strBuilder = new StringBuilder(); 

    while (matcher.find()) { 
     strBuilder.append(matcher.group()); 
     strBuilder.replace(strBuilder.length() - 1, strBuilder.length(), "\n"); // To make it platform independent, user System.lineSeparator() instead of "\n" - only works in Java 7 
    } 

    if (matcher.hitEnd()) { 
     strBuilder.append(testString.substring(strBuilder.length())); 
    } 

    String newString = strBuilder.toString(); 
    System.out.println(newString); 

输出将是:

This is just a regular test. 
This is just a regular test. 
This is just a regular test. 
相关问题