我需要找到指定格式的最大子序列,如
[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)
答案 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"