我的字符串如下所示
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 24416 2408 1360 S 0.0 0.2 0:00.88 init
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
171 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 mpt_poll_0
818 messageb 20 0 23940 1260 920 S 0.0 0.1 0:00.97 dbus-daemon
995 whoopsie 20 0 185m 4224 3000 S 0.0 0.4 0:00.06 whoopsie
1000 daemon 20 0 16908 156 0 S 0.0 0.0 0:00.19 atd
24043 root 20 0 570m 3952 2780 S 0.0 0.4 0:04.28 console-kit-dae
24110 root 20 0 182m 3032 2484 S 0.0 0.3 0:01.66 polkitd
26310 root 20 0 0 0 0 S 0.0 0.0 0:00.00 flush-8:0
30081 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kworker/0:1
31381 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:2
31511 root 20 0 81900 3904 3048 S 0.0 0.4 0:00.03 sshd
31646 root 20 0 19228 1376 1060 R 0.0 0.1 0:00.00 top
现在我想拆分这个字符串所以我使用了以下java函数
for(int i = 0; i < mystring.length; i++){
String[] values = mystring.split("\\s+");
System.out.println(values[0]);
}
但是当我检查values[0]
时,它只显示31646不显示其他?我认为我在分裂中的正则表达式错了,所以我也尝试了这个"\\t\\n\\x0B\\f\\r"
但是它不起作用。如果有人知道怎么管这个?
答案 0 :(得分:1)
我不知道您想要什么输出,但请尝试使用此代码。
String[] values = mystring.split("\\s+");
for(int i=0; i<values.length;i++)
{
System.out.println(values[i]);
}
这将拆分并显示mystring中空格中分隔的所有内容。
编辑:既然我知道你想要什么,我可以帮助你一点点。你想要的是一个二维数组,所以你可以按照你想要的方式。如果你这样做:
String[] values = mystring.split("\\s+");
String[][12] output;
for(int i = 0; i < (values.length)/12 ;i++)
{
for(int i = 0; j < 12; j++)
{
output[i][j] = values[i*12 + j];
}
}
由于有12个命令,数组将是x乘12.现在你可以在另一个循环中打印它们。
for(int i = 0; i < output.length; i++)
{
for(int j = 0; j < 12; j++)
{
System.out.print(output[i][j] + " ");
}
System.out.println(" ");
}
您也可以创建一个类并将每个值存储为变量。你想要做的只是更适合一系列对象。
答案 1 :(得分:0)
我相信它应该足以完成这项工作。我建议你删除加号。试试这个。
String[] values = mystring.split("\\s+");
for(int i=0; i<mystring.length;i++){
System.out.println(values[0]);
}
你把数组保存在for子句中是错误的。这应该工作。 如果您有任何疑问,请询问。并标记为答案,如果它可以帮助你
答案 2 :(得分:0)
您正在尝试打印我在代码下面尝试的第一个元素,它工作得很好
String mystring =“1111 2222 eeeeeee www eeeeee”;
String[] values = mystring.split("\\s+");
for(int i=0; i< values.length;i++){
System.out.println(values[i]);
}