解析字符串以获取特定值

时间:2019-07-04 06:35:16

标签: java string parsing

我正在尝试从字符串生成器获取值,在这里我已将字符串生成器转换为字符串以获取值,但无助于获取特定值。

“我的字符串”构建器的输出为

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位。

3 个答案:

答案 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.

如果您喜欢在逗号之前将空格更改为 " , "

相关问题