拆分方法java

时间:2012-08-08 16:08:44

标签: java split

我想知道正则表达式从字符串中删除句点而不影响十进制数,然后将它们存储为单独的标记

str = "..A 546.88 end."

在上面的字符串值中,我只需要值#34; 546.88"," A"," end"并将它们存储到数组中

感谢您的帮助

2 个答案:

答案 0 :(得分:4)

最通用的是:

[0-9]+(\.[0-9][0-9]?)?

我创建了一个小样本来做你在评论中提出的问题:

  

我想要的是一个包含“A”,“546.88”,“end”的数组,如果可能的话

public class JavaApplication39 {

    static String str = "..A 546.88 end.";

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // Create a pattern to match breaks
        Pattern p = Pattern.compile("[0-9]+(\\.[0-9][0-9]?)?");
        // Split input with the pattern
        String[] result = p.split(str);
        Matcher m = p.matcher(str);
        ArrayList<String> strings = new ArrayList<>();

        while (m.find()) {//all those that match
            strings.add(m.group());
            //System.out.println(m.group());
        }

        for (int i = 0; i < result.length; i++) {//all those that dont match
            strings.add(result[i].replaceAll("\\.", "").trim());//strip '.' and ' '
            // System.out.println(result[i]);
        }
        //all contents in array
        for (Iterator<String> it = strings.iterator(); it.hasNext();) {
            String string = it.next();
            System.out.println(string);
        }
    }
}

答案 1 :(得分:2)

你似乎有两个问题。第一个是删除所有不属于十进制数的句点,您可以通过保留以下正则表达式中的两个组来完成:

"(.*(\\D|^))\\.+((\\D|$).*)"

这个正则表达式是:任何东西 - 不是数字或行的开头 - 句号 - 不是数字或行尾 - 任何东西

String s = "..A 546.88 .end.";
Pattern p = Pattern.compile("(.*(\\D|^))\\.+((\\D|$).*)");
Matcher m = p.matcher(s);
while(m.matches())
{
    s = m.group(1) + "" + m.group(3);
    System.out.println(s);
    m = p.matcher(s);
}

给出

A 546.88 end

第二个问题是从剩余的字符串中获取三个值,您可以使用myString.split("\\s+") - 这将为您提供数组中的三个值。

String[] myArray = s.split("\\s+");