我試圖撰寫一個程式來檢測給定 2 個字串的字謎。我的方法是將兩個字串都轉換為字符陣列,然后在比較之前對它們進行排序。我知道我可以使用 sort.() 函式,但我不想使用任何匯入來訓練海豚。
問題是我希望我的程式在掃描字謎時忽略空白。在當前版本中,輸出是這樣的:(三角形,相關)--->真(三角形,相關)--->假
雖然它應該都是真的。
我將不勝感激!
這是我的代碼,(請忽略我的評論):
public static boolean anagramCheck(String a, String b) {
boolean r = true;
// In Char Arrays umwandeln /
char[] Ca = a.toCharArray();
char[] Cb = b.toCharArray();
// Laengen Abfrage
int L1 = Ca.length;
int L2 = Cb.length;
// Erste For-Schleife
for (int i = 0; i < L1; i ) {
for (int j = i 1; j < L1; j ) {
if (Ca[j] < Ca[i]) {
char temp = Ca[i];
Ca[i] = Ca[j];
Ca[j] = temp;
}
}
}
// Zweite For-schleife
for (int i = 0; i < L2; i ) {
for (int j = i 1; j < L2; j ) {
if (Cb[j] < Cb[i]) {
char temp = Cb[i];
Cb[i] = Cb[j];
Cb[j] = temp;
}
}
}
// Char Arrays zu Strings
String S1 = String.valueOf(Ca);
String S2 = String.valueOf(Cb);
// Vergleich und Ausgabe
if (S1.compareTo(S2) == 0) {
return r;
}
else {
r = false;
return r;
}
}
}
uj5u.com熱心網友回復:
的String.replace(String, String)是所述非正則運算式替換方法。所以洗掉所有空格:
String S1 = String.valueOf(Ca).replace(" ", "");
String S2 = String.valueOf(Cb).replace(" ", "");
在a和上執行此操作會更好b。
uj5u.com熱心網友回復:
public static boolean isAnagram(String one, String two) {
char[] letters = new char[26];
for (int i = 0; i < one.length(); i ) {
char ch = Character.toLowerCase(one.charAt(i));
if (Character.isLetter(ch))
letters[ch - 'a'] ;
}
for (int i = 0; i < two.length(); i ) {
char ch = Character.toLowerCase(two.charAt(i));
if (Character.isLetter(ch))
letters[ch - 'a']--;
}
for (int i = 0; i < letters.length; i )
if (letters[i] != 0)
return false;
return true;
}
uj5u.com熱心網友回復:
通常,代碼越少越好(如果可讀)。學習一門語言意味著學習內置的圖書館。
這是一種回傳已排序字符的字串的方法:
public static String sortChars(String str) {
return str.replace(" ", "").chars().sorted()
.mapToObj(c -> (char)c "")
.collect(Collectors.joining(""));
}
使用此方法,您的主要方法變為:
public static boolean anagramCheck(String a, String b) {
return sortedChars(a).equals(sortedChars(b));
}
像這樣重構,使用命名良好的方法使您的代碼更易于理解、測驗、除錯和維護。
值得注意的是,您實際上并不需要一個排序的字串……一個排序的陣列同樣可以很好地服務,并且需要更少的代碼:
public static int[] sortChars(String str) { return str.replace(" ", "").chars().sorted().toArray(); }
public static boolean anagramCheck(String a, String b) {
return Arrays.equal(sortedChars(a), sortedChars(b));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364816.html
