我如何添加" \ n"字符串中每6个空格?

时间:2013-12-15 08:07:01

标签: java arrays string replace split

我在多维数组中有很长的字符串。我一直试图找出一种方法,用"\n"替换每个字符串中的每个第6个空格,这将导致它基本上按下回车。

例:
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);
            }
        }
    }
}

4 个答案:

答案 0 :(得分:3)

这是一个单行解决方案:

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

替换术语$0是整个匹配项,因此会将匹配的内容加上换行符。

如果正则表达式不太符合您的喜好,请更改它。例如,如果您想用换行符替换第6个空格,请从捕获中排除尾随空格:

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

答案 1 :(得分: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

答案 2 :(得分: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(无论如何),你将获得返回的字符串。

答案 3 :(得分: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.