我在下面的文本文件中有大约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方法(如子字符串)来完成,还是适合使用正则表达式?
答案 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];