拆分带有限制的字符串

时间:2016-05-11 00:38:29

标签: java regex

我想分割一个字符串,但我想拆分它删除数字,当然,后面的字符,它不等于指定的数字。

这是我的代码:

32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X

更好的解释:

样品:

32 X or 32X // Whatever
32 X
32 Y
32 X
32 X

如果我想要所有32个数字和后面的字符,它应该返回:

{{1}}

我坚持让它发挥作用,任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:2)

我会使用PatternMatcher来解决它,而不是尝试拆分字符串。

修改:更新了代码,以显示如何收集List<String>并转换为String[],如果需要。

public static void main(String[] args)
{
    // the sample input
    String x = "32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X";

    // match based upon "32". This specific match can be made into
    // a String concat so the specific number may be specified
    Pattern pat = Pattern.compile("[\\s]*(32\\s[^\\d])");

    // get the matcher
    Matcher m = pat.matcher(x);

    // our collector
    List<String> res = new ArrayList<>();

    // while there are matches to be found
    while (m.find()) {
        // get the match
        String val = m.group().trim();
        System.out.println(val);

        // add to the collector
        res.add(val);
    }

    // sample conversion
    String[] asArray = res.toArray(new String[0]);
    System.out.println(Arrays.toString(asArray));
}

根据样本输入返回输出:

  

32 X
  32 X
  32 Y
  32 X
  32 X
  [32 X,32 X,32 Y,32 X,32 X]

答案 1 :(得分:1)

感谢https://txt2re.com

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Parser {

    public static void main(String[] args) {
        String txt="32 X 28 Y 32 X 40 Y 36 X 32 Y 32 X 24 X 32 X";

        String re1="(\\d+)";    // Integer Number 1
        String re2="(\\s+)";    // White Space 1
        String re3="(.)";   // Any Single Character 1

        Pattern p = Pattern.compile(re1+re2+re3,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
        Matcher m = p.matcher(txt);
        while (m.find())
        {
            String int1=m.group(1); //here's the number
            String c1=m.group(3); //here's the letter

            if (Integer.parseInt(int1) == 32) {
                System.out.println(int1.toString()+" "+c1.toString());  
            }
        }
    }

}