java如何把一个字符串拆分后用foreach分行打出并用stringbuilder重组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何把一个字符串拆分后用foreach分行打出并用stringbuilder重组?相关的知识,希望对你有一定的参考价值。

原因解析:

点进去看源码,debug一下,如下图:


可以看到,刚刚开始的时候,确实是有0-7,8个分割出来的东西存在,有三个是空字符串,""。不是null。不用担心空指针异常。

然后 看到下面的继续走,if语句,就看到,他把这个list从尾部开始判断,如果这个list的后面的字符串的长度是0,那么这个resultSize就 减减,然后一直while循环,

直到不符合条件,那么list的下标是5、6、7的值就被抛弃了,然后新生的结果字符串数组,的大小就变成加工过后的长度,那么就变成了长度 5的数组。

list.subList(0, resultSize).toArray(result)

就是这句话啦。

他只是处理后面尾部的空字符串,不处理中间的空字符串和 开头的空字符串。

知道这个原理之后,那么这个 问题以后怎么变,你都了然于胸啦。

下面是又更新的

(2017/07/13更新)

现在要求字符串

"aa12sas32sasa223sas12as12wqe"//去掉数字,然后弄成数组
"aa,,sas,,sasa,,,,sasas,,,"//去掉逗号,不管几个逗号,都去掉
"aa  sas sa sa     sas  as  "//去掉空格,也不管几个,
把他们给分解成数组,同时刨除掉不用的多余信息。

具体实现代码如下:

[java] view plain copy

    private static void testSplitPlus()   

    String ss = "aa12sas32sasa223sas12as12wqe";  

    String[] array = ss.split("[\\\\d]+");  

    System.out.println(Arrays.toString(array));  

    ss = "aa,,sas,,sasa,,,,sasas,,,";  

    array = ss.split("[,]+");  

    System.out.println(Arrays.toString(array));  

    ss = "aa  sas sa sa     sas  as  ";  

    array = ss.split("[\\\\s]+");  

    System.out.println(Arrays.toString(array));  

      

    下面再看看这个split的源码。

    [java] view plain copy

    public String[] split(String regex)   

    return split(regex, 0);  

      

    不知道你看到没,那个regex,不就是正则表达式的意思嘛?

    那就明白了,这个方法是支持正则表达式操作的。那上面的代码就好解释啦。

    第一个[\\\\d]+这个解释就是\\\\是转义符,d表示数字,括起来后面的加号表示一个或者多个,那么就可以解释运行结果啦。

    第二个[,]解释类似,就是逗号出现一次或多次,

    第三个,\\\\s,就是匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \\f\\n\\r\\t\\v]。

    然后下面,看运行结果。


    这就是我们要的结果啦。

参考技术A public static void main(String[] args) 
String content="contenttest";
char[] chartArray=new char[content.length()];
content.getChars(0, content.length(), chartArray, 0);
for(char temp:chartArray)
System.out.println(temp);

Java:拆分字符串并将它们放入文本区域的

【中文标题】Java:拆分字符串并将它们放入文本区域的【英文标题】:Java: Split strings and put them into text area's 【发布时间】:2013-03-03 00:34:16 【问题描述】:

我有一种方法可以将名称及其分数保存到文本文件中。现在我做了一个“高分”按钮,调用一个从高分文本文件中读取的方法。现在这个输出很丑,所以我想把名字放在一个文本区域,把分数放在另一个文本区域,这样它们就被均匀地分开了。

我该怎么做?

提前致谢

我目前的输出:

【问题讨论】:

为什么是JTextArea?我认为将JLabels 与适当的布局管理器结合使用可以得到你想要的(例如FlowLayout 和使用BoxLayout 的嵌套组件)。另外,请附上sscce。 很难说出您实际在问什么。请尝试将您的问题归结为本质,然后再提问。 【参考方案1】:

假设文件的格式是这样的:

姓名;得分\n OTHERNAME;OTHERSCORE\n ...

你可以这样做:

BufferedReader br = new BufferedReader(...); // Initialize a buffered reader reading from that text file.
String line;
while ((line = br.readLine() != null) 
    String name = line.split(";")[0];
    String score = line.split(";")[1];
    namesTextArea.append(name + "\n");
    scoresTextArea.append(score + "\n");

希望对你有帮助!

【讨论】:

【参考方案2】:

听起来您真正想要的是一种处理姓名和分数对齐的方法。您可以使用 Java 对 format strings 的支持来自动填充 name 字段并为其指定最大宽度,从而将所有分数对齐在同一列中:

String.format("%-20.20s %s", "Name", "Score")

这将填充每个名称以使其宽度为 20 个字符,如果名称超过 20 个字符,也会截断该名称,使其不会溢出到乐谱区域。您可以将上面的20 更改为您认为合理的任何宽度。

【讨论】:

以上是关于java如何把一个字符串拆分后用foreach分行打出并用stringbuilder重组?的主要内容,如果未能解决你的问题,请参考以下文章

在字符后用空格/两个空格分割字符串

在 foreach-object 循环中拆分字符串

R:如何在 foreach %dopar% 中拆分数据帧

分行成词任务——线性搜索法

java怎么以空格,英文逗号和句号拆分一个字符串,一个逗号我会,同时三个该怎么写

java如何从一串字符串中拆分出姓名地址和电话号码