文字列を含むテキストファイルがあります。私の問題は、特定の文字列を検索する方法がわからないことです。私が検索しているように見えるのは特定の文字だけです。コードを再帰的にする必要があります。
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import java.util.Stack;
public class LangValidator {
private static final char delimeter = '$';
public static boolean isValidString(String s) {
//Hint: use a stack of characters:
Stack<Character> stack = new Stack<Character>();
int i = 0;
char c;
while (i < s.length()) {
c = s.charAt(i);
if (c == delimeter)
break;
stack.push(c);
i++;
}
i++;
while (i < s.length()) {
c = s.charAt(i);
if (stack.isEmpty()) return false;
if (stack.pop() != c) return false;
i++;
}
return stack.isEmpty();
}
//これは私がエラーを抱えている部分です。特定の文字を検索できますが、文字列を試すと、文字定数しか追加できないというエラーが発生します。
public static boolean isValidStringRec(String s) {
if (s == null) return false;
char[] ch = s.toCharArray();
for (char c : ch) if (c != '$' && c != 'b') return true;
if(s == "$$$") return false;
return false;
}
public static void main(String[] args) throws FileNotFoundException {
Scanner fin = new Scanner(new FileReader("input.txt"));
while (fin.hasNext()) {
String str = fin.nextLine();
System.out.println(str);
System.out.println(isValidStringRec(str));
System.out.println();
}
}
}
更新:これは入力ファイルです:
$
$$$
a$a
abab$abab
ab$ba$ab$ba
aba$abaa
bbbaaa$aaabbb
aabb$bba
aba$aba
さて、私たちの会話に基づいて、文字列が回文であるかどうかを見つけるための回復的な方法があります。
public static boolean isValidStringRec(String s) {
if(s == null)
return false;
if(s.length() <= 1)
return true;
if(s.charAt(0) == s.charAt(s.length()-1))
return isValidStringRec(s.substring(1, s.length()-1));
return false;
}
指定された文字列の最初と最後の文字が同じであるかどうかをチェックし、同じである場合は、文字列の残りの部分が回文であるかどうかをテストします(部分文字列は最初のパラメーターに含まれ、2番目のパラメーターに含まれます)。
特定の文字列の最初と最後の文字が同じでない場合、その文字列は回文ではないため、falseを返します。
trueを返す唯一の方法は、文字列の長さが1または0の場合です。元の文字列の長さが奇数の場合、つまり、文字列の前のペアがすべて同じである場合は1になります。また、回文(レースカーなど)も同様です。元の文字列が偶数の長さで、前の文字列のペアがすべて同じ(アンナなど)の場合、長さは0です。
回文で大文字と小文字を区別する必要がない場合、この方法は機能しないことに注意してください。必要な場合は、修正するか、質問して編集します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加