【发布时间】:2020-11-23 19:20:56
【问题描述】:
我需要帮助,因为我无法在正确的位置停止 while 循环。 在此示例中,只要字符串“seq”与列表中的某个数字(867)相同,我想删除最后一个字符,然后停止。
更高级的是,在找到 String 之后,将它们添加到新的 ArrayList 中,然后尝试找到 String 的其余部分(75)。如果找到,也输入到新的数组中。
非常欢迎所有更好的解决方案。谢谢!
ArrayList 列表可以包含数百个元素,只有 4 个,列表中的某些元素可以重复多次。目前在列表中查找第一个对我来说很好。如果找到,将 86775 拆分为 867:75。从 String seq 中删除 867 并添加到新的 ArrayList。最后,我们必须找到 75 - 如果它不存在,则拆分为 7:5,并尝试找到 7 和 5。在我的列表中,单个数字始终存在,因此没有异常问题。
如果您想始终使用拆分方法,我需要尽可能找到更大的数字,然后如果没有找到拆分并删除最后一个,但我需要每个数字。
正在检查的字符串可以有 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: found ?: 0 times
86775
8677
867 <- stop here
86
8
【问题讨论】:
-
如果你确实想停止一段时间,那么你总是可以使用一个标志,当你想停止一段时间时,一些布尔值将是错误的
-
请举一个更详细的例子,哪个变量包含哪个值,为什么要继续或停止,输入和预期输出是什么
-
@vmrvictor 代码中已经存在的输入。只是显示的输出格式不正确。
-
对不起,我无法理解您的期望以及输出中的不正确之处
-
如果我正确理解了这个问题,
getPatternFound(String.valueOf(list), seq)应该返回列表中的值(表示为字符串)与seq匹配的次数。当它返回 0 时,循环继续。所以getPatternFound没有正确实现。
标签: java loops arraylist while-loop char