是否可以将所有特殊字符和标点符号(除句点)分割成字符串?

时间:2019-01-22 15:48:40

标签: java regex

我试图拆分一个字符串以从中提取Float值,但我还需要保留其余字符串(按顺序)。例如:字符串“#345.23)”将变为[“#”,“ 345.23”,“)”]。

由于在“ \ b”上进行拆分会按标点符号/特殊字符将其拆分,所以我认为我可以使用它,并添加一个额外的条件来表示“在除标点符号外的所有标点上均拆分”。我的逻辑正确还是我的正则表达式太远了?

 if (containsFloat(str)) {
        String[] pp = str.split("\\b(^\\.)");
        System.out.println(pp[0]);
        System.out.println(pp[1]);
        System.out.println(pp[3]);
    }

2 个答案:

答案 0 :(得分:0)

您可以在此处尝试使用public double calc(String input) { int result; ScriptEngineManager sem= new ScriptEngineManager(); ScriptEngine engine = sem.getEngineByName("JavaScript"); result = (Double)engine.eval(input) return result; } ,但是使用正式的正则表达式模式匹配器可能更有意义。这是一个简短的脚本,显示了如何执行此操作。它使用以下模式进行匹配:

String#split()

这与带有可选小数部分的数字或完全由非数字组成的任何其他术语匹配。

\d+(?:\.\d+)?|\D+

答案 1 :(得分:0)

如果您只需要保持字符串不包含浮点数,则可以执行以下操作:

String str = "asdja#345.23)asd0.87ahsdflj%4.5fdshjk&10.0&1";
Matcher m = Pattern.compile("\\d*\\.?\\d+").matcher(str);

while(m.find()) {
    Float f = Float.parseFloat(m.group());
    System.out.println(f);
    str = str.replace(m.group(), "");
}
System.out.println(str);

输出:

345.23
0.87
4.5
10.0
1.0
asdja#)asdahsdflj%fdshjk&&

或者像以前一样,将非浮点数保留在数组中,就像在模式上一样:

String str = "asdja#345.23)asd0.87ahsdflj%4.5fdshjk&10.0&1";
Matcher m = Pattern.compile("\\d*\\.?\\d+").matcher(str);

while(m.find()) {
    Float f = Float.parseFloat(m.group());
    System.out.println(f);
}

String[] strings = str.split("\\d*\\.?\\d+");
System.out.println(Arrays.toString(strings));

输出:

345.23
0.87
4.5
10.0
1.0
[asdja#, )asd, ahsdflj%, fdshjk&, &]