用正则表达式查找子字符串中的数字对

时间:2016-08-06 19:46:08

标签: java regex

我需要找到指定格式的最大子序列,如

  

[a,b],[c,d](b> a和c> d)

我的算法运行正常。但是当我尝试以 \ d {2} 格式分割输入字符串时,它会将我分割一位数。如何解决它!救命,请!

这是我的主要课程。

    /**
 * 
 */
package pack;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author serg_shapoval
 *
 */
public class Pairs {

    public static String pairs(String input) {
        List<Pair> list = new ArrayList<>();
        List<Pair> tempList = new ArrayList<>();
        List<Pair> maxSubqueryList = new ArrayList<>();
        String[] inputArr = input.split("\\d{2}");
        System.out.println(Arrays.toString(inputArr));
        for (int i = 0; i < inputArr.length; i++) {
            Pair p = new Pair();
            p.setFirstNumber(inputArr[i].charAt(1));
            p.setSecondNumber(inputArr[i].charAt(2));
            list.add(p);
        }
        if (list.isEmpty()) {
            return "null";
        }
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).getFirstNumber() < list.get(i).getSecondNumber()
                    && list.get(i + 1).getFirstNumber() > list.get(i + 1).getSecondNumber()) {
                tempList.add(list.get(i));
                tempList.add(list.get(i + 1));
            }

            if (tempList.size() >= maxSubqueryList.size()) {
                maxSubqueryList.clear();
                maxSubqueryList.addAll(tempList);
                tempList.clear();

            }
        }

        return maxSubqueryList.toString();
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(pairs("12 34 45 32 12 45 32 4 55 6"));
    }

}

这是我的Pair课程。

    /**
 * 
 */
package pack;

/**
 * @author serg_shapoval
 *
 */
public class Pair {

    private int firstNumber;
    private int secondNumber;
    /**
     * @return the firstNumber
     */
    public int getFirstNumber() {
        return firstNumber;
    }
    /**
     * @param firstNumber the firstNumber to set
     */
    public void setFirstNumber(int firstNumber) {
        this.firstNumber = firstNumber;
    }
    /**
     * @return the secondNumber
     */
    public int getSecondNumber() {
        return secondNumber;
    }
    /**
     * @param secondNumber the secondNumber to set
     */
    public void setSecondNumber(int secondNumber) {
        this.secondNumber = secondNumber;
    }




}

这是我使用此字符串“12 34 45 32 12 45 32 4 55 6”

的输出
  

[,,,,,,,, 4,6]   线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:1       at java.lang.String.charAt(String.java:658)       at pack.Pairs.pairs(Pairs.java:24)       在pack.Pairs.main(Pairs.java:53)

2 个答案:

答案 0 :(得分:1)

我认为你不想用2位数字分割。这就是说你希望分隔字符串是一个2位数的序列。我们以逗号分隔的字符串为例:“foo,abc,def”。在这种情况下,分隔符是逗号。因此,当我们执行.split(“,”)时,它会产生一个[“foo”,“abc”,“def”]数组。对? 所以在你的情况下,你会输入一串“12 34 45 32 12 45 32 4 55 6”。在2位数字序列上拆分将产生[“”,“”,“”,“”,“”,“”,“4”,“6”]的数组,因为你说2个数字字符是什么是分离你想要的有意义的数据。我的猜测是你想要反其道而行,对吗?

答案 1 :(得分:0)

抱歉,有一段时间因为没有使用java一年。问题是import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; class Ideone { public static void main (String[] args) throws java.lang.Exception { ArrayList<String> allMatches = new ArrayList<String>(); Matcher m = Pattern.compile("\\d{2}") .matcher("12 34 45 32 12 45 32 4 55 6"); while (m.find()) { allMatches.add(m.group()); System.out.println(m.group()); } } } 使用的正则表达式是分隔符,而不是将返回的分隔符(我试过它并且它只返回空格)。

这可以解决问题:

"Done"