Java 去除均匀长度
编写一个RemoveEventLength方法,该方法将字符串的ArrayList作为参数,并从列表中删除所有偶数长度的字符串Java 去除均匀长度,java,Java,编写一个RemoveEventLength方法,该方法将字符串的ArrayList作为参数,并从列表中删除所有偶数长度的字符串 public void removeEvenLength(ArrayList <String> stringList){ for(int i=0;i<stringList.size();i++){ String word=stringList.get(i); if(word.length()%2==0){//ev
public void removeEvenLength(ArrayList <String> stringList){
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
if(word.length()%2==0){//even
stringList.remove(word);//if it is even,test from the first word then continue looping
}
}
}
当我尝试传入[This,is,a,test]时,它应该返回a。但是它却给了我is,a。有什么问题吗?提示:您正在迭代期间从列表中删除当前项。考虑一下这可能会对随后的迭代产生什么影响。提示:您正在迭代期间从列表中删除当前项。想一想这会对接下来的迭代产生什么影响
public static void removeEvenLength(ArrayList <String> stringList){
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
System.out.println(word+" "+word.length()+" "+word.length()%2);
if(word.length()%2==0){//even
System.out.println("Rmoving "+word);
stringList.remove(word);
removeEvenLength(stringList);//Recursive call
}
}
}
使用递归调用函数
使用递归调用函数。您能试试下面的方法吗?它对我有用
import java.util.*;
class Fun
{
public static void removeEvenLength(ArrayList <String> stringList){
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
if(word.length()%2==0){//even
stringList.remove(word);//if it is
i = i-1;
continue;
}
}
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
System.out.println(word);
}
}
public static void main(String []args)
{
ArrayList <String> stringList = new ArrayList <String>();
stringList.add("this");
stringList.add("is");
stringList.add("a");
stringList.add("test");
removeEvenLength(stringList);
}
}你能试试下面的吗?它对我有用
import java.util.*;
class Fun
{
public static void removeEvenLength(ArrayList <String> stringList){
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
if(word.length()%2==0){//even
stringList.remove(word);//if it is
i = i-1;
continue;
}
}
for(int i=0;i<stringList.size();i++){
String word=stringList.get(i);
System.out.println(word);
}
}
public static void main(String []args)
{
ArrayList <String> stringList = new ArrayList <String>();
stringList.add("this");
stringList.add("is");
stringList.add("a");
stringList.add("test");
removeEvenLength(stringList);
}
}在循环列表时从列表中删除项目时,请使用迭代器。它会帮你解决这个问题
public void removeEvenLength( List<String> stringList ) {
Iterator<String> iterator = stringList.iterator();
while( iterator.hasNext() ) {
final String word = iterator.next();
if( word.length() % 2 == 0 ) {
iterator.remove();
}
}
}
更好的方法是创建一个包含所有奇数长度值的新列表。这样您就不会修改原始列表。一般来说,没有副作用的功能越多越好
public List<String> removeEvenLength( List<String> stringList ) {
List<String> oddList = new ArrayList<String>();
for( String word : stringList ) {
if( word.length % 2 == 1 ) {
oddList.add( word );
}
}
return oddList;
}
在循环列表时从列表中删除项目时,请使用迭代器。它会帮你解决这个问题
public void removeEvenLength( List<String> stringList ) {
Iterator<String> iterator = stringList.iterator();
while( iterator.hasNext() ) {
final String word = iterator.next();
if( word.length() % 2 == 0 ) {
iterator.remove();
}
}
}
更好的方法是创建一个包含所有奇数长度值的新列表。这样您就不会修改原始列表。一般来说,没有副作用的功能越多越好
public List<String> removeEvenLength( List<String> stringList ) {
List<String> oddList = new ArrayList<String>();
for( String word : stringList ) {
if( word.length % 2 == 1 ) {
oddList.add( word );
}
}
return oddList;
}
在Java 8中,您可以使用RemoveiPredicate从集合中删除元素,而无需手动创建迭代器:
在Java 8中,您可以使用RemoveiPredicate从集合中删除元素,而无需手动创建迭代器:
这是我的做法:
public static void removeEvenLength(ArrayList<String> l){
ArrayList<String> temp = new ArrayList<>();
for(String word : l){
if(word.length()%2==0){temp.add(word);}
}
l.removeAll(temp);
}
这是我的做法:
public static void removeEvenLength(ArrayList<String> l){
ArrayList<String> temp = new ArrayList<>();
for(String word : l){
if(word.length()%2==0){temp.add(word);}
}
l.removeAll(temp);
}
在海事组织,这是一个有效的问题。这是一个常见的新手错误。我不认为有必要进行向下投票。对不起。事实上,我重复了我的java模块,因此我的概念非常薄弱,因此我可能倾向于提出更简单的问题。你应该注意,这不一定是处理列表的坏模式,但一旦你开始处理foreach循环,它就会崩溃。我只是对你的问题的向下投票作出了反应。你表现出了努力,却在一个问题上绊倒了,我不明白反对票是从哪里来的。这是一个常见的新手错误。我不认为有必要进行向下投票。对不起。事实上,我重复了我的java模块,因此我的概念非常薄弱,因此我可能倾向于提出更简单的问题。你应该注意,这不一定是处理列表的坏模式,但一旦你开始处理foreach循环,它就会崩溃。我只是对你的问题的向下投票作出了反应。你付出了努力,却意外地发现了一个问题,我不明白反对票是从哪里来的。因此,如果我删除它,我应该I=I+1吗?@user2179615:我让你去弄清楚需要发生什么。我设法用I=I-1得到答案。但我不明白。因为我扣除了一个值,我不是应该加回去而不是减吗?在你删除后想想列表的大小。如果我删除它,我应该i=i+1吗?@user2179615:我把它留给你去弄清楚需要发生什么。我设法用i=i-1得到答案。但我不明白。因为我扣除了一个值,我不应该加回去而不是减吗?想想移除后列表的大小为什么需要递归?当然还有其他方法。对我来说,这一种更简单。如果使用递归,为什么要循环列表?这个例子需要做一些工作。在这个例子中,递归方面是完全无用的。你为什么需要递归?当然还有其他方法。对我来说,这一种更简单。如果你使用递归,为什么要循环列表?这个例子需要做一些工作。在这个例子中,递归方面是完全无用的。