从文件中提取值

时间:2012-02-02 21:37:06

标签: java regex string

我在下面的文本文件中有大约10行数据,其中包含以下内容

X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001
X-Value = -0.755030, Y-Value = 7.861651, Z-Value = 6.016289, Timestamp(milliseconds) = 23208

我现在使用的代码使用BufferedReader读取文件的每一行,但我真正想要做的是提取 X值 Y值,每行的 Z值时间戳(毫秒)值。这可以通过使用简单的String方法(如子字符串)来完成,还是适合使用正则表达式?

5 个答案:

答案 0 :(得分:4)

您可以先按,分割字符串,然后将每个部分拆分为=,然后根据需要修剪前导/尾随空格。

您可以使用String.split()java.util.StringTokenizer

答案 1 :(得分:2)

您可以使用String.split将字符串拆分为,=

String str = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
ArrayList<String> final_data = new ArrayList<String>();
String[] data = str.split(",");
for(String S : data)
final_data.add(S.trim().split("=")[1]);

for(String s : final_data)
System.out.println(s.trim());

输出=

  

-0.525108

     

7.746691

     

5.863008

     

23001

答案 2 :(得分:1)

您可以使用此类扫描仪来提取您的值:

String str = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
Scanner scanner = new Scanner(str);
if (scanner.findInLine("^X-Value\\s*=\\s*([^,]*),\\s*Y-Value\\s*=\\s*([^,]*),\\s*Z-Value\\s*=\\s*([^,]*),\\s*Timestamp\\(milliseconds\\)\\s+=\\s+([^,]*)\\s*$") != null) {
    MatchResult result = scanner.match();
    System.out.printf("x=[%s]; y=[%s]; z=[%s]; ts=[%s]%n", result.group(1), result.group(2), result.group(3), result.group(4));
}
scanner.close();

<强>输出:

x=[-0.525108]; y=[7.746691]; z=[5.863008]; ts=[23001]

答案 3 :(得分:0)

为什么要玩split(),只需要去正则表达式!

X-Value\s*=\s*([\d.+-]*).*Y-Value([\d.+-]*).*Z-Value\s*=\s*([\d.+-]*).*Timestamp\(milliseconds\)\s*=\s*(\d*)

答案 4 :(得分:0)

    String s = "X-Value = -0.525108, Y-Value = 7.746691, Z-Value = 5.863008, Timestamp(milliseconds) = 23001";
    s = s.replaceAll(" ", "");
    String[] split = s.split("=|,");

    BigDecimal x = new BigDecimal(split[1]);
    BigDecimal y = new BigDecimal(split[3]);
    BigDecimal z = new BigDecimal(split[5]);
    String ts = split[7];
相关问题