繁体   English   中英

如何在字符串中每6个空格添加一个“ \\ n”?

[英]How do i add a “\n” every 6 spaces in a string?

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

例:
orginalString =“我要在此的第六个空格之后放置回车”;

FormatedString =“我要在\\ n的第六个空格之后输入enter”

这就是我到目前为止所得到的。 可能完全错误。

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

这是一种解决方案:

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

替换项$0是整个匹配项,因此会返回匹配项和换行符。

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

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

我会这样做

// 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

你说得很对。 我建议以下内容:

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(whatever),您将获得返回的字符串。

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

    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.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM