0

我收到这种格式的字符串TEST [52.5, 77.5]

收到上述字符串后,我想形成两个元素,如下所示

TEST 52.5

TEST 77.5

我已经尝试如下所示,但没有得到我想要的输出。

public class Test {
    public static void main(String args[]) throws Exception {
        String string = "TEST [52.5, 77.5]";
        String strModf = string.replaceAll("\\[", " ");
        String newStr = strModf.replaceAll("\\]", " ");

        // Used StringBuffer here but not able to succeed .

    }
}
4

4 回答 4

3

我会做这样的事情:

String str = "TEST [52.5, 77.5]";
Pattern p = Pattern.compile("(.*?)\\s*\\[(.*)\\]");
Matcher m = p.matcher(str);

if (m.find()) {
    String first = m.group(1);
    String[] others = m.group(2).split("\\s*,\\s*");

    for (String other : others)
        System.out.println(first + " " + other);
}
测试 52.5
测试 77.5
于 2013-09-27T13:54:50.990 回答
2

由于方括号内的数字可能会有所不同,因此出于可扩展性的原因,我建议采用稍微不同的方法:

String s = "TEST [52.5, 77.5, 86.5]";
String slist = s.replaceAll("^.*?\\[\\s*([^\\]]+)\\s*\\]", "$1");
String fword = s.substring(0, s.indexOf(' ')+1);
for (String t : slist.split(",\\s*"))
    System.out.println(fword + t);

输出:

TEST 52.5
TEST 77.5
TEST 86.5
于 2013-09-27T14:10:48.067 回答
0

我能想到的最简单的解决方案:

    String string = "TEST [52.5, 77.5]";
    String strFirst = string.replaceFirst("\\[", "").replaceFirst(",.*", "");
    String strSecond = string.replaceFirst("\\[.*,\\s+", "").replaceFirst("\\]", "");
    System.out.println(strFirst);
    System.out.println(strSecond);

输出

TEST 52.5
TEST 77.5

正则表达式 apidoc

. 任何字符(可能匹配或不匹配行终止符)
X* X,零次或多次
\s 空白字符:\p{IsWhite_Space}
X+ X,一次或多次

于 2013-09-27T13:57:30.593 回答
0

如果你不是正则表达式的粉丝,你可以做这样的事情(拥抱?不!!!):

String str = "TEST [75.1, 7.52]";

String root = str.substring(0, str.indexOf('['));

String elements = str.substring(str.indexOf('[')+1, str.indexOf(']'));

String[] parts = elements.split(",");

String elem1 = root+ " " + parts[0];

String elem2 = root+ " " + part[1];

我知道的更详细一点。

于 2013-09-27T14:17:01.117 回答