如何拆分字符数为String的字符串,字符为空格

时间:2014-06-25 08:39:02

标签: java

我想将String拆分为每行最多字符数的行,而只在空格上拆分。

示例:

如果我的字符串是good morning , today is monday good morning , today is monday 字符数:11

输出应为

good
morning , 
today is 
monday good
morning , 
today is 
monday

这是我的两行代码

public String skipRowLettreNumbre(String lettre) {
        String ret = lettre + "\n";
        if (lettre.length() > 36) {
        String after50 = lettre.substring(36);
        for (int i = 0; i < after50.length(); i++) {
            if (after50.substring(i, i + 1).equals(" ")) {
                String part1 = lettre.substring(0, i + 36);
                String part2 = lettre.substring(i + 36, lettre.length());
                ret = part1 + "\n   " + part2;
                break;
            }
        }
    }
    return ret + "";
}

5 个答案:

答案 0 :(得分:2)

试试这个:

public String breakLines(String input, int maxWidth) {
    StringBuilder sb = new StringBuilder();
    int charCount = 0;
    for(String word : input.split("\\s")) {
        if(charCount > 0) {
            if(charCount + word.length() + 1 > maxWidth) {
                charCount = 0;
                sb.append('\n');
            } else {
                charCount++;
                sb.append(' ');
            }
        }
        charCount += word.length();
        sb.append(word);
    }
    return sb.toString();
}

注意:此方法将使用单个空格(或换行符)替换所有空格字符。

答案 1 :(得分:1)

不确定要实现的目标,但不会str.trim().split(" ")完成工作吗?

String str = "good morning , today is monday good morning , today is monday ";

String[] arrayStr = str.trim().split(" ");

如果您想要出现次数,只需int a = arrayStr.length -1

修改 仍然无法得到你想要的。据我所知,你想用固定的字符数字拆分字符串而不是拆分字(例如scho \ n ol)。如果是这样,您可以查看this question。这不是一件容易的事。

答案 2 :(得分:1)

好的,经过一些谷歌搜索后,我发现了使用rexeg matcher的解决方案:

String text = "good morning , today is monday good morning , today is monday ";
String patternString = "(.{1,11}\\s+)";

Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);

int count = 0;
ArrayList<String> list = new ArrayList<>();
while (matcher.find()) {
    count++;
    String match = matcher.group().trim();
    System.out.println(match);
    list.add(match);
}
String[] result = list.toArray(new String[count]);

这基本上搜索 1到11个字符的文本.{1,11}),然后是至少一个空格\\s+)并打破文字分为这些部分。

请注意输入字符串必须以空格结尾才能生效,因此在使用此字符串时,请在字符串末尾添加额外空格,或更改{{1} } \\s+至少一个空格,或字符串的结尾)。

另外,这里是我写的这个教程:

Java rexegJava regex quantifiersMatcher tutorial

输出:

(\\s+|$)

答案 3 :(得分:0)

您的问题似乎很不清楚,但是根据我的想法,您希望根据空格字符拆分字符串。简单: -

String string="good morning , today is monday good morning , today is monday";
String[] arr=string.split(" "); 

这里的arr是包含所有字符串的String数组。

答案 4 :(得分:0)

灵感来自kajacx's answer

public String breakLines(String input, int maxWidth) {
    return input.replaceAll("(\\G.{1," + maxWidth + "})(\\s+|$)", "$1\n"));
}