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]。
然后下面,看运行结果。
这就是我们要的结果啦。
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
?我认为将JLabel
s 与适当的布局管理器结合使用可以得到你想要的(例如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重组?的主要内容,如果未能解决你的问题,请参考以下文章