需要解释此代码块java

时间:2015-06-21 06:12:29

标签: java string collections

最近有机会了解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循环中我正在检查String的索引但是j是什么呢? 现在我知道只有(i=0;i<string.length();i++ )类型的for循环...没有在for循环中得到额外的int。

顺便说一下,这个程序对于java freshers来说有多复杂......只是传递出去了?

2 个答案:

答案 0 :(得分: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);
    }
 }

答案 1 :(得分:1)

for循环中,您可以针对特定事项使用3个部分:

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

首先,所有这3个部分都是强制性的,如果你写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)

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