如何在适当的位置停止一会儿循环?

达瑞克

我需要帮助,因为我无法停止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

aheger24

要回答主要问题:完成后如何退出?

当然,您可以使用breakcontinue关键字循环执行此操作我认为更优雅的是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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:如何暂停True循环一会儿?

来自分类Dev

一会儿循环和“ this”对象

来自分类Dev

一会儿循环和“ this”对象

来自分类Dev

暂停一会儿循环

来自分类Dev

在C中经过一段时间后如何停止一会儿循环

来自分类Dev

当计数器达到一定数量时停止一会儿循环

来自分类Dev

Chrome:过一会儿,onaudioprocess停止调用

来自分类Dev

一会儿循环条件的同步块

来自分类Dev

防止闪亮的应用中断一会儿循环

来自分类Dev

异常发生后继续一会儿循环

来自分类Dev

我的程序在做一会儿循环

来自分类Dev

继续一会儿循环直到EOF(Qt)

来自分类Dev

如何在tkinter中增加减少按钮一会儿?

来自分类Dev

如何根据用户输入退出一会儿(1)?

来自分类Dev

如何正确阻止UIButton一会儿

来自分类Dev

使用一会儿(x)

来自分类Dev

做一会儿行不通

来自分类Dev

一会儿数学运算

来自分类Dev

使用一会儿(x)

来自分类Dev

做一会儿行不通

来自分类Dev

单击按钮会停一会儿

来自分类Dev

大约一会儿(!(cin >> x))

来自分类Dev

如何运行一会儿条件式的条件来查看嵌套列表中所有列表的位置?

来自分类Dev

您可以从循环外部中断一会儿循环吗?

来自分类Dev

打破一会儿循环,一口气切换

来自分类Dev

为什么过一会儿在Mac上我停止接收OSC消息?

来自分类Dev

为什么 spd-say 在命令行中过一会儿就停止说话?

来自分类Dev

一会儿循环后左尖括号在bash中意味着什么?

来自分类Dev

可以在scala中使用一会儿循环并产生收益