我想根据特殊字符将句子分成单词(例如" =") 我尝试了下面的代码,但无法得到确切的答案,请参阅我的代码:
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
上面的代码正确分割,但我无法获得准确的结果。 它只显示字符串的最后两部分,我需要显示所有四个部分。
请分享您的想法或解决方案......
答案 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();
}
}
}