簡體   English   中英

如何多次檢查特定事件?

[英]How can I check a specific occurance more than once?

我是初學者。 我的代碼假定,如果*前后的字符相同,則用戶將輸入帶有'*'(星號)的單詞並顯示“ same”。 例如,對於輸入ja'*'aisfun,我的輸出應為“ same”,因為*介於相同字母之間。 我的代碼似乎適用於大多數情況,例如幾顆星,但是當我嘗試使用“ ja”, “ a”, “ isfun”之類的用戶輸入時,即使由於“ a”而應顯示“ different”,輸出仍是“ same”。和“ i”是不同的字母。 我想我的代碼在這種情況下只能檢查第一顆星星。 我該如何解決這個問題? (考慮沒有撇號的星星)

    String ind = "DIFFERENT";
    for (int i = 0; i< s.length(); i++) {
        if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1))
            ind = "SAME";
        }
        System.out.print(ind);
    }
    System.out.print("NO");

您必須限制從第二個字符到最后一個第二個字符的循環,並在找到匹配項時中斷(我想):

String ind = "DIFFERENT";
for (int i = 1; i < s.length() - 1; i++) {
    if ((s.charAt(i) == '*') && (s.charAt(i-1)) == s.charAt(i+1)) {
        ind = "SAME";
        break;
    }
}
System.out.print(ind);

也下降:

System.out.print("NO");

首先,您需要修復循環索引。 它應該從1s.length() - 1 ,否則,如果最后一個或第一個字符是*則將導致索引超出范圍異常。

其次,如果*周圍至少有一對字符不同,則似乎要輸出“ DIFFERENT”。 你可以做到這一點break ,你發現一對是荷蘭國際集團不同圈外一旦:

// be careful of bounds of the indexes    
for (int i = 1; i< s.length() - 1; i++) {
    if ((s.charAt(i) == '*')) {
            if ((s.charAt(i-1)) == s.charAt(i+1)) {
                ind = "SAME";
            } else {
                ind = "DIFFERENT";
                break;
            }
        }
    }
    System.out.print(ind);

另外,您可以使用正則表達式解決方案:

if (Pattern.compile("(.)\\*(?!\\1)").matcher(s).find()) {
    System.out.println("DIFFERENT");
} else {
    System.out.println("SAME");
}

暫無
暫無

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

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