将java中的字符串拆分为固定长度的块

Vic*_*cky 4 java string split

我在一个名为string1到string7的程序中有七个字符串.

每个字符串的大小为30个字符.

我将得到一个未知长度的输入字符串.

我必须将此输入字符串拆分为30个字符串,然后将第一个子字符串设置为string1,将第二个字符串设置为string2,依此类推,直到可能为止.如果输入字符串大于210个字符,则结尾处的剩余字符串将被忽略.

当输入字符串的大小小于210 char时,如何处理这种情况.

对于例如145,在这种情况下,string1到string4将是full,而string5将由剩余的15个char组成.

怎么处理这个很好?

我可以通过char读取char并将前30个char和string1,next2等接下来直到所有char消耗完为止.

但是有更好的方法吗?

Lou*_*man 10

如果你可以使用第三方库,与番石榴只是

Iterable<String> chunks = Splitter.fixedLength(30).split(string);
Run Code Online (Sandbox Code Playgroud)

这可以转换为List<String>例如Lists.newArrayList.

(披露:我向番石榴捐款.)


Mat*_*ias 5

private static Collection<String> splitStringBySize(String str, int size) {
    ArrayList<String> split = new ArrayList<>();
    for (int i = 0; i <= str.length() / size; i++) {
        split.add(str.substring(i * size, Math.min((i + 1) * size, str.length())));
    }
    return split;
}
Run Code Online (Sandbox Code Playgroud)


小智 4

由于您的字符串不在数组或列表中,因此您需要显式分配它们。

    Matcher m = Pattern.compile(".{1,30}").matcher(s);
    String s1 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s2 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s3 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s4 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s5 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s6 = m.find() ? s.substring(m.start(), m.end()) : "";
    String s7 = m.find() ? s.substring(m.start(), m.end()) : "";
Run Code Online (Sandbox Code Playgroud)