【问题标题】:Need explanation for this code block java需要解释这个代码块java
【发布时间】:2015-06-21 06:12:28
【问题描述】:

最近有机会了解java新生的招聘流程。 遗憾的是,没有人因为这个项目而进入第二轮。因此,作为一名爱好者,我请我的一个朋友给我解决方案,但是由于我是 Java 新手并且还没有接触到集合框架,所以我不太了解它。 所以可以解释一下这个逻辑或者代码。

问题是在不使用 String 类方法的情况下从字符串中删除重复项。?!

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String str="this is java this is cpp";

        List<String> l=new LinkedList<String>();
        int i=0,j;
        for(i=0,j=str.indexOf(' ');j!=-1;i=j,j=str.indexOf(' ', i+1))
        {
            String s=str.substring(i,j).trim();
            l.add(s);
        }
        String s=str.substring(i+1,str.length()).trim();
        l.add(s);

        Iterator<String> it=l.iterator();
        List<String> list=new LinkedList<String>();
        while(it.hasNext())
        {
            String s1=it.next();
            if(!list.contains(s1)){
                list.add(s1);
            }else
            {
                list.remove(s1);
            }
        }
        System.out.println(list);
    }

}

在 for 循环中 i 正在检查 String 的索引,但是 j 到底是什么? 现在我知道只有 (i=0;i&lt;string.length();i++ ) 那种 for 循环...没有在 for 循环中得到额外的 int。

顺便说一句,这个针对 java 新生的程序有多复杂..刚刚过去了?

【问题讨论】:

  • 这是一个非常标准的(如果是人为的)字符串处理函数……如果你熟悉字符串处理,应该不会太难写。 (例如,尝试编写一个字符串反转函数作为练习)。
  • 是的,先生,我正在练习编程技巧,学习 coderbyte ,codingbat 程序 :)
  • @TimBiegeleisen .. 这不是我的代码.. 我是 java 新手.. 我没有写它
  • 这段代码很丑 IMO...

标签: java string collections


【解决方案1】:

您需要修改最终while 循环中的逻辑。 if 声明是正确的,但如果遇到重复项,则不应删除列表中已有的那个。

 Iterator<String> it = l.iterator();
 List<String> list = new LinkedList<String>();
 while (it.hasNext()) {
     String s1 = it.next();
     if (!list.contains(s1)) {
         list.add(s1);
    }
 }

【讨论】:

    【解决方案2】:

    for 循环中,您可以将 3 个部分分别用于特定事项:

    for ( /* part1 */ ; /* part2 */ ; /* part3 */ )
    

    首先,所有这三个部分都是强制性的,如果你写for(;;),你可能需要一个无限循环,尽管你无论如何都需要break

    在第 1 部分中,您可以启动任意数量的变量,用 , 分隔

    for(int i=0, int j=-10, int k=0 ; ... ; ...)
    

    在第 2 部分中,您可以检查任意数量的条件以完成循环

    for( .... ; i<=j, j>10, i<500 ; ...)
    

    最后,在第 3 部分中,您有权对任意数量的变量执行一些操作(通常是增加计数器)

    for(.... ; ... ; i++, j++, k+=2)
    

    考虑到所有这些,您的代码正在尝试拆分子字符串并显示与主字符串 str 不同的单词集合。

    怎么做?

    j = str.indexOf(' ', i+1)
    

    成功了。它会找到主字符串的下一个空白 ' ' 部分,并尝试将子字符串从当前索引拉到下一个空格。需要更多解释吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      相关资源
      最近更新 更多