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

Java 用正则表达式查找子字符串中的数对,java,regex,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 cl

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

[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"));
    }

}
这是我的输出,使用这个字符串“12 34 45 32 12 45 32 4 55 6”

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


我认为你不想被两位数字符分开。这意味着您希望定界字符串是2位序列。让我们以逗号分隔的字符串为例:“FoO,ABC,DEF”。本例中的分隔符是逗号。因此,当我们进行.split(“,”)时,它会生成一个数组[“foo”,“abc”,“def”]。对吗?
因此,在你的例子中,你要输入一个字符串“1234453224543556”。在两位数的数字序列上拆分会产生一个[“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”4、“”6“]的数组,因为您说的是两个数字字符是分隔所需有意义数据的方式。我猜你想要相反的结果,对吗

对不起,我花了一段时间,因为我已经一年没有使用java了。问题是
input.split(\\d{2})使用的正则表达式
不是将返回的分隔符(我尝试了它,它只返回空格)

这可以做到:

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());
        }
    }
}
import java.util.ArrayList;
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
ArrayList allMatches=新的ArrayList();
Matcher m=Pattern.compile(“\\d{2}”)
.matcher(“12344532124543556”);
while(m.find()){
添加(m.group());
System.out.println(m.group());
}
}
}

我很确定,无论是mfaith的解决方案还是我的解决方案都足以解决您的问题。如果不是这样,你应该寻求进一步的帮助或澄清。请考虑这个社区的程序员自由地提供他们的专业知识;因此,当你提出问题时,确保跟进是很重要的。
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());
        }
    }
}