2017-04-04 264 views
3

我想檢查一個字符串是否在給定的字母表中找到。 舉例來說,如果我有:檢查一個List/ArrayList是否包含一個字符串的字符Java

ArrayList<String> list = new ArrayList(); 
list.add("a"); 
list.add("e"); 
list.add("i"); 
list.add("o"); 
list.add("u"); 

String str = "aeo"; 

for (int i = 0; i < list.size(); i++) 
    for (int j = 0; j < str.length(); j++) { 
     if (list.get(i).equals(str.charAt(j))) 
      count++; 
    } 
System.out.println(count); 

str是我在信列表中找到,所以我看到有值3我的計算,因爲我已經找到了3場比賽,在我的列表中的字符串。 無論如何,計數值打印爲0。 主要想法是,我不得不檢查str中是否存在str,無論str中的字母順序如何。

+1

爲什麼你有'列表'而不是'列表'?迭代'str'字符串以獲取其各個字符,然後使用'list.contains(strChar);'是否更容易? – Tom

+1

你是對的:)。使用字符來比較字符而不是字符串要容易得多。 – lexraid

回答

5

您在比較StringCharacter,因此equals返回false

比較char!而非:

for (int i = 0; i < list.size(); i++) { 
    for (int j=0; j < str.length(); j++) { 
     if (list.get(i).charAt(0) == str.charAt(j)) { 
      count++; 
     } 
    } 
} 

這是假設你的list只包含單個字符String秒。順便說一句,如果是那樣的話,你會用char[]替換爲:

char[] list = {'a','e','i','o','u'}; 
for (int i = 0; i < list.length; i++) { 
    for (int j = 0; j < str.length(); j++) { 
     if (list[i] == str.charAt(j)) { 
      count++; 
     } 
    } 
} 
1

的字符串不等於一個字符,所以你必須將字符轉換爲字符串。

if (list.get(i).equals(String.valueOf(str.charAt(j)))) 

或字符串爲char和這樣的比較吧:

if (list.get(i).getCharAt(0)==str.charAt(j)) 
1

您可以使用streams獲得在一條線上的答案,因爲其內部註釋如下所示:

ArrayList<String> list = new ArrayList(); 
//add elements to list 

String str = "aeo";//input string 

//split str input string with delimiter "" & convert to stream 
long count = Arrays.stream(str.split("")).//splt the string to array 
    filter(s -> list.contains(s)).//filter out which one matches from list 
    count();//count how many matches found 
System.out.println(count); 
0

是的,這是對的。感謝它。而且我剛纔也檢查,看到我可以讓我的列表:

ArrayList<Character> list ; 

,而不是

ArrayList<String> list ; 
1

字符轉換爲字符串:

list.get(i).equals(String.valueOf(str.charAt(j))) 

正確的語法將字符轉換爲字符串是:

list.get(i).charAt(0) == str.charAt(j) 

list.get(i).getCharAt(0)==str.charAt(j)將不會像Jens的答案中所寫的那樣工作。

相關問題