如何根据特殊字符将句子分成单词

时间:2014-12-18 11:50:32

标签: java

我想根据特殊字符将句子分成单词(例如" =") 我尝试了下面的代码,但无法得到确切的答案,请参阅我的代码:

import java.io.*;
import java.util.*;
public class RunExe {


    public static void main(String[] args) {
        try
        {
            Process pr=Runtime.getRuntime().exec("VmgDiskActivityTest.exe");
            BufferedReader rd=new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String lines=rd.readLine();
            String[] words=null;
            while(lines!=null)
            {
                System.out.println(lines);
                //System.out.println("*******************");
                words=lines.split("=");
                lines=rd.readLine();
            }
            System.out.println("After Spliting");
            //System.out.println("***************************");
            for(String word:words)
            {
                System.out.println(word);
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }

}

代码的输出是:

0 C:D:E:= 99.993340#0.000000#0.035810#0.000000#0.000179#0.000358#0.000000#0.000000#0.000000#1.999614#3071.407671 _Total = 99.993340 0.000000##0.035810 0.000000##0.000179#0.000358 0.000000##0.000000 0.000000##1.999614#3071.407671

分裂后 _总 99.993340 0.000000##0.035810 0.000000##0.000179#0.000358 0.000000##0.000000 0.000000##1.999614#3071.407671

上面的代码正确分割,但我无法获得准确的结果。 它只显示字符串的最后两部分,我需要显示所有四个部分。

请分享您的想法或解决方案......

4 个答案:

答案 0 :(得分:2)

您读取循环中的行,将其拆分,并分配给外部定义的words数组。 在下一次迭代中,您将获得下一行,拆分它,并(重新)分配相同的数组。 在最后一次迭代之后,words数组因此包含拆分最后一行的结果,即最后打印出的内容。

答案 1 :(得分:0)

每次进入循环时都会覆盖数组words的内容。因此,只有最后一条分割线代表它的内容。

您可以为每一行添加Map个数组,并将结果存储在该行中。

String lines=rd.readLine();
String[] words=null;
Map<Integer,String[]> map=new HashMap<Integer,String[]>();
Integer index=0;

while(lines!=null)
{
  System.out.println(lines);
  //System.out.println("*******************");
  words=lines.split("=");
  map.put(index,words);
  index++;
  lines=rd.readLine();
}

然后简单地遍历列表并获取每行的split数组(index表示从0开始的行号)

for (Map.Entry<Integer, String[]> entry : map.entrySet()) {
    System.out.println("Line " + entry.getKey());
    for(final String content: entry.getValue()){
        System.out.println(content);
    }
}

答案 2 :(得分:0)

在第words=lines.split("=");行中,您基本上会覆盖您的单词 - 数组,因此始终只会获取上一个lines字符串的结果。
要实现您的目标,您应该使用ArrayList<String>代替String[],然后您可以写words.addAll(lines.split("=");
最后,您将拥有一个带有所有条目的ArrayList,而不仅仅是最后两个条目。

答案 3 :(得分:0)

您可以将StringTokenizer类用于此

你必须导入StringTokenizer import java.util.StringTokenizer;

public static void main(String[] args) {
        try
        {
            Process pr=Runtime.getRuntime().exec("VmgDiskActivityTest.exe");
            BufferedReader rd=new BufferedReader(new InputStreamReader(pr.getInputStream()));
            String lines=rd.readLine();
            String[] words=null;
            StringTokenizer st2=null;
            while(lines!=null)
            {
                System.out.println(lines);
                //System.out.println("*******************");
                //words=lines.split("=");
                st2 = new StringTokenizer(lines, "=");

                lines=rd.readLine();
            }
            System.out.println("After Spliting");
            //System.out.println("***************************");
              while (st2.hasMoreElements()) {
                   System.out.println(st2.nextElement());
              }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

    }

}