Java 用正则表达式查找子字符串中的数对
我需要找到指定格式的最大子序列,如 [a,b],[c,d](b>a和c>d) 我的算法运行良好。但当我尝试以\d{2}格式拆分输入字符串时,它会将我拆分一位数。如何修复它!救命啊 这是我的主课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
/**
*
*/
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());
}
}
}