字符串数组的文件服务器内容(Java)
我正在编写一个代码,它采用字符串数组并过滤掉包含特定字母的特定内容。例如,对于我拥有的数组,我希望过滤掉包含字母“b”的所有内容,并将它们从数组中删除,而不创建新数组(从现有数组中删除)。我目前正在使用indexOf方法,它给了我一些问题。它告诉我一个错误,int不能转换成字符串。我不知道这有什么问题字符串数组的文件服务器内容(Java),java,arrays,loops,indexing,filter,Java,Arrays,Loops,Indexing,Filter,我正在编写一个代码,它采用字符串数组并过滤掉包含特定字母的特定内容。例如,对于我拥有的数组,我希望过滤掉包含字母“b”的所有内容,并将它们从数组中删除,而不创建新数组(从现有数组中删除)。我目前正在使用indexOf方法,它给了我一些问题。它告诉我一个错误,int不能转换成字符串。我不知道这有什么问题 public class Main { public static void main(String[] args) { String [] arr = {"abc"
public class Main {
public static void main(String[] args) {
String [] arr = {"abc","bcd", "cad", "aaa"};
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length(); j++){
String index = arr[i].indexOf(j, j + 1);
if(index == "b"){
arr[i] = "";
}
}
}
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
}
}
公共类主{
公共静态void main(字符串[]args){
字符串[]arr={“abc”、“bcd”、“cad”、“aaa”};
对于(int i=0;i
arr[i].indexOf(j,j+1)
应替换为arr[i].substring(j,j+1)
,因为String#indexOf
的返回类型是一个整数,但您希望字符返回到此位置
及
if(index==“b”)
由if(index.equals(“b”)
生成,因为由于index
和“b”
是两个不同的对象,您可能会得到意外的结果。这就是为什么应该使用String#equals
的原因
也就是说,通过使用
String#contains
公共类主{
公共静态void main(字符串[]args){
字符串[]arr={“abc”、“bcd”、“cad”、“aaa”};
对于(int i=0;i
您遇到的问题是String.indexOf方法返回字符串中出现另一个字符串的位置,如果没有出现,则返回-1。在您的例子中,您正在查看数组中的每个条目,并检查j是否出现在字符串中
如果要使用indexOf,可以使用arr[i].indexOf(“b”)。这将在字符串中搜索给定的子字符串“b”。然后,您必须检查返回的值是否不等于-1,如果不等于-1,则将该数组位置分配给一个空字符串。这里有一个使用Java流API的替代解决方案
import java.util.Arrays;
public class Main {
public static void main(String... args) {
String [] arr = {"abc","bcd", "cad", "aaa"};
arr = Arrays.stream(arr)
.filter(str -> !str.contains("b")) // Remove elements containing "b"
.toArray(String[]::new);
System.out.println(Arrays.toString(arr));
}
}
通过使用数组索引流:
IntStream.rangeClosed(0,arr.length-1)
.forEach(i -> {if (arr[i].contains("b")) arr[i]="";});
或:
我相信您需要的是charAt()而不是indexOf()。我假设@jhale1805您不是在修改现有数组,而是在创建新数组–@SergeyAfinogenov您是对的,OP要求解决方案“在不创建新数组的情况下”工作,并且该解决方案在技术上确实创建了新数组。这就是说,OP还要求一个解决方案“从数组中删除(带有“b”的元素)”。在我看来,从阵列中取出一些东西意味着要调整到更小的容量,这需要创建一个新的阵列。考虑到相互冲突的需求,我选择在解决方案中优先考虑后者。作为旁注,您使用Streams替换空字符串的解决方案教会了我一些新的东西!谢谢
IntStream.rangeClosed(0,arr.length-1)
.filter(i-> arr[i].contains("b"))
.forEach(i-> arr[i]="");