簡體   English   中英

如何在Java中測試字符串是否等於數組中的任何其他字符串

[英]How to test if a String equals any other Strings in an Array in java

我有一個String數組,我想看看此數組中有多少個不同的字符串。 表示有多少個字符串,不計算重復的字符串。 這是我所擁有的:

int strings = 0;
int arrayLength = x.length;

    for (int currentNum = 1; currentNum < arrayLength; currentNum++) {
        for (int i = currentNum + 1; i < arrayLength; i++) {
            if (x[currentNum].equals(x[i])) {
               break;      
            } else {
              strings++;
        } 
    } 
    return strings;
}

但這永遠不會返回正確的金額,有人可以告訴我為什么嗎?

更新:

出於好奇,如果我還想檢查該字符串是否向后等於其他字符串,該怎么辦? 然后,HashSets將不起作用。

您的代碼有2個問題。 首先,數組索引從0開始,而不是1 其次,當您想跳過該行時, break將帶您進入strings++ 相反,您想continue外部循環,以便不執行strings++ 令人討厭的是,您不能單獨使用continue ,因為這適用於內部循環。 您可以使用標簽,如下所示:

loop:
for (int currentNum = 0; currentNum < arrayLength; currentNum++) {
    for (int i = currentNum + 1; i < arrayLength; i++) {
        if (x[currentNum].equals(x[i])) {
            continue loop;
        }
    }
    strings++;
}

請嘗試使用hashset

    int strings = 0;
    int arrayLength = x.length;

    HashSet<String> unique = new HashSet<String>(Arrays.asList(x));
    return unique.size();

我添加了示例代碼片段。 請嘗試這個。

嘗試這個:

int strings = 0;
int arrayLength = x.length;

for (int currentNum = 0; currentNum < arrayLength; currentNum++) {
    ++strings;

    for (int i = 0; i < arrayLength; i++) {
        if (i != currentNum && x[currentNum].equals(x[i])) {
           --strings;
           break;      
        }
    }
} 

return strings;

這樣,您為當前字符串加1,然后檢查所有其他字符串(不包括他自己),如果找到您,則減去1。

如果要檢查字符串是否也向后匹配,則可以使用向后的字符串創建另一個集合(backwardsSet),並且僅當backwardsSet中不存在該集合時,才將其放在另一個集合中。

如果您真的只想計算不同的字符串,則只需使用以下命令:

Arrays.stream(strings).distinct().count()

如果您想忽略回文症:

 final String[] strings = { "ab", "ba", "ab", "cd" };
    // I assume a and b are not null
    final BiPredicate<String, String> equal = 
        (a, b) -> a.equals(b) || new StringBuilder(a).reverse().toString().equals(b);
    final Set<String> set = new HashSet<>();
    for (final String s1 : strings)
      if (!set.stream().anyMatch(s2 -> equal.test(s1, s2)))
        set.add(s1);
    System.out.println(set.size());

如果您需要處理很多字符串,則可以對此進行優化。 不同長度的字符串不能相等。 您可以創建一個分區,在其中具有相同大小的字符串子集。 然后處理那些子集(請參閱Collectors.groupBy(...) )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM