我正在尝试从字符串生成器获取值,在这里我已将字符串生成器转换为字符串以获取值,但无助于获取特定值。
“我的字符串”构建器的输出为
SN: 00486 Mode: 1
Temp. 15.4 C
Fat............... 0.0%
SNF............... 0.4%
进一步用类似的字符代替,
String i = stringBuilder.toString();
i = i.replaceAll("[^\\d.]", "");
我的输出是
004861.15.4...............0.0...............0.4
我希望我的输出仅获得Temp,Fat和SNF的那些值(数字),如果使用任何循环,如何用小数点克服那些点?请帮助我。
预期输出,
Temp的15位(两位数),Fat的0.0位,SNF的0.4位。
答案 0 :(得分:0)
尽管这是一段丑陋的代码,请尝试一下
StringBuilder sb=new StringBuilder("SN: 00486 Mode: 1\n" +
"Temp. 15.4 C\n" +
"Fat............... 0.0%\n" +
"SNF............... 0.4%");
String str=sb.toString();
str=str.replace("%","").replace("\n"," ");
String[] splt=str.split(" ");
String fullStr="";
for (String st: splt ) {
try {
Double num=Double.parseDouble(st);
fullStr+=num.toString()+"\n";
}catch (Exception ex){
}
}
System.out.println(fullStr);
这里所有数字都是分开的。并且您也可以分离所需的内容。
如果需要澄清,请询问。
答案 1 :(得分:0)
好吧,我将代码替换为
i = i.replaceAll(“ [^ \ d]”,“”);
我得到的结果为
00486117000240241040719
我后来通过转换为int []来更改它并得到了我的值的位置,感谢大家的答复。
答案 2 :(得分:0)
最好用模式读出搜索到的值
Pattern snpat = Pattern.compile( "(?<info>[^\\d\\:\\.\\x20\r\n]+)(:?[\\.]+)(:?\\x20)?(?<value>[\\d\\.]+)[^\r\n][\r\n]?", Pattern.MULTILINE );
Matcher m = snpat.matcher( str );
String rslt = "";
while( m.find() ) {
String value = m.group( "value" );
if( m.group( "info" ).equals( "Temp" ) && value.indexOf( '.' ) >= 0 ) // ignore decimal places
value = value.substring( 0, value.indexOf( '.' ) );
rslt = String.join( rslt.isEmpty() ? "" : ", ", rslt, value + " from " + m.group( "info" ) );
}
System.out.println( rslt + '.' );
给予:
15 from Temp, 0.0 from Fat, 0.4 from SNF.
如果您喜欢在逗号之前将空格更改为 " , "