[英]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");
首先,您需要修復循環索引。 它應該從1
到s.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.