我需要帮助,因为我无法停止while循环,因此我需要纠正位置。在此示例中,我想删除最后一个字符,只要字符串“ seq”与列表中的某个数字(867)相同即可。在找到将它们添加到新的ArrayList的String之后,比尝试查找String的其余部分(75)要先进得多。如果找到,还输入新阵列。所有更好的解决方案都非常受欢迎。谢谢!ArrayList列表可以包含数百个元素,只有4个,列表中的某些元素可以重复一次以上。在这一刻,在列表中查找第一对我来说很好,如果找到的话,将86775拆分为867:75。867从String seq中删除并添加到新的ArrayList。最后,我们还必须找到75(如果不存在),拆分为7:5,然后尝试找到7和5。在我的列表上,单个数字始终存在,因此没有问题。如果您始终要使用拆分方法,则我需要找到比未拆分并删除最后一个但我需要的每个数字都高的数字。寻找的String甚至可以包含20个字符或更多。这是最简单的示例。我一直在寻找解决此问题的许多方法,但我不确定这是最佳方法。
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("567");
list.add("867");
list.add("86");
list.add("75");
System.out.println(list);
String seq = "86775";
System.out.println(seq + ": found ?: " + getPatternFound(String.valueOf(list), seq) + " times");
int nbChar = 0;
do {
getRemoveLastChar(seq, 1);
if (getPatternFound(String.valueOf(list), seq) == 0) ;
getRemoveLastChar(seq, 2);
nbChar++;
System.out.println(getRemoveLastChar(seq, nbChar));
}
while (nbChar < seq.length());
}
private static String getRemoveLastChar(String str, int nbChar) {
return str.substring(0, str.length() - nbChar);
}
private static int getPatternFound(String longString, String pat) {
Pattern pattern = Pattern.compile(pat);
Matcher matcher = pattern.matcher(longString);
int count = 0;
while (matcher.find())
count++;
return count;
}
}
[567、867、86、30] 867755:找到了?:0次86775 8677 867 <-在此处停止86 8
要回答主要问题:完成后如何退出?
当然,您可以使用break
或continue
关键字循环执行此操作。我认为更优雅的是return
在单独的方法中的使用。如果以后进行更改,它使代码更易于理解。
这是一个显示您所说的行为的实现:
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("567");
list.add("867");
list.add("86");
list.add("75");
System.out.println("List = " + list);
String seq = "86775";
String result = search(list, seq);
}
/**
*
* @param list
* @param seq
* @return null means no match;
*/
private static String search(ArrayList<String> list, String seq) {
while (seq.length() > 0) {
System.out.println("analyzing seq: " + seq);
boolean broken = false;
for (String s : list) {
if (seq.contentEquals(s)) { // if matched
System.out.println("found match: " + s);
// do your logic, for example
seq = seq.replace(s, "");
// quit the loop at right place
return s;
}
}
seq = seq.substring(0, seq.length() - 1);
}
return null;
}
}
产生输出:
List = [567, 867, 86, 75]
analyzing seq: 86775
analyzing seq: 8677
analyzing seq: 867
found match: 867
阅读您要使用的工具时:String APIString.contains(String infix)
与结合使用String.replace(String old, String new)
。这些应该比循环手动完成所有事情要好得多,可以解决您的实际问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句