最近有机会了解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来说有多复杂......只是传递出去了?
答案 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
!
中,您可以使用,
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)
诀窍。它会找到主字符串的下一个空白' '
部分,并尝试将当前索引的子字符串拉到下一个空格。需要更多解释吗?