-1

我的字符串如下所示

     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",但它不起作用。如果有人知道如何管理这个?

4

3 回答 3

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(" ");
}

您也可以只创建一个类并将每个值存储为变量。您想要做的只是更适合一组对象。

于 2013-10-14T12:29:57.243 回答
0

好吧,我相信 \s 应该足以完成这项工作。我建议你删除加号。尝试这个。

String[] values = mystring.split("\\s+");

for(int i=0; i<mystring.length;i++){
    System.out.println(values[0]);
}

您将数组保留在 for 子句中,这是错误的。这应该有效。如果您有问题,请询问。如果对您有帮助,请标记为答案

于 2013-10-14T12:27:51.647 回答
0

您正在尝试打印我在代码下面尝试过的第一个元素,它工作得非常好

String mystring = "1111 2222 eeeeee www eeeeee";

        String[] values = mystring.split("\\s+");
        for(int i=0; i< values.length;i++){
        System.out.println(values[i]);
        }
于 2013-10-14T12:35:57.053 回答