4 回答

TA貢獻2016條經驗 獲得超9個贊
您不需要進行任何拆分。除了它不正確(oooxxx例如 try 或OOOxxx)這一事實之外,它相當低效,因為它需要創建新對象。你不需要這樣做。
一次只迭代一個字符,檢查當前字符是什么,然后遞增/遞減計數器:
int count = 0;
for (int i = 0; i < str.length(); ++i) {
switch (str.charAt(i)) {
case 'o': case 'O':
count++;
break;
case 'x': case 'X':
count--;
break;
}
}
return count == 0;
更喜歡使用索引循環而charAt不是迭代toCharArray(),因為后者會創建一個包含整個字符串的新 char 數組。

TA貢獻1836條經驗 獲得超3個贊
您的方法似乎不區分大小寫;我將遍歷輸入中的所有字母String(首先將其轉換為小寫字母)并計算x和o字符。就像是,
int x = 0, o = 0;
for (char ch : str.toLowerCase().toCharArray()) {
if (ch == 'x') {
x++;
} else if (ch == 'o') {
o++;
}
}
return o == x;

TA貢獻1853條經驗 獲得超6個贊
實際上有許多不同的方法可以實現這一點:
統計字符串中某個字符出現的次數
命令式方法
使用遞歸
使用正則表達式
使用 Java 8 特性
使用第三方庫(特別是 Apache Commons 或 Spring Framework)
這個例子是我可能會嘗試的(至少作為“優化”之前的第一次削減):
public static boolean isSameXOCount (String str) {
? int ctX = 0, ctO = 0;
? for (int i=0; i < str.length; i++) {
? ? char c = str.charAt(i);
? ? if (c == 'X' || c == 'x')
? ? ? ctX++;
? ? else if (c == 'O' || c == 'o')
? ? ? ctO++;
? }
? return ctX == ct);
}

TA貢獻1802條經驗 獲得超10個贊
你可以做類似的事情
return StringUtils.countMatches(str, "x") == StringUtils.countMatches(str, "o")
.
為什么要兩次發明輪子?讓我知道這是否對您有幫助。我沒有嘗試代碼,但它應該可以工作。
添加回答
舉報