2013-12-15 42 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. 
相關問題