Javaのユーザーからの入力を使用して文を取得しようとしていますが、小文字にしてすべての句読点を削除する必要があります。ここに私のコードがあります:
String[] words = instring.split("\\s+");
for (int i = 0; i < words.length; i++) {
words[i] = words[i].toLowerCase();
}
String[] wordsout = new String[50];
Arrays.fill(wordsout,"");
int e = 0;
for (int i = 0; i < words.length; i++) {
if (words[i] != "") {
wordsout[e] = words[e];
wordsout[e] = wordsout[e].replaceAll(" ", "");
e++;
}
}
return wordsout;
文字以外の文字をすべて削除する方法を見つけることができないようです。私は運のない正規表現とイテレータを使用してみました。助けてくれてありがとう。
これは、最初にすべての非文字を削除し、小文字に折り畳んでから、入力を分割し、すべての作業を1行で実行します。
String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
最初はスペースが入力に残っているため、分割は引き続き機能します。
ゴミ文字before splittingを削除することで、要素をループする必要がなくなります。
以下を使用できます 正規表現の構成
句読点:! "#$%& '()* +、-。/ :; <=>?@ [] ^ _` {|}〜のいずれか
inputString.replaceAll("\\p{Punct}", "");
これを試すことができます:-
Scanner scan = new Scanner(System.in);
System.out.println("Type a sentence and press enter.");
String input = scan.nextLine();
String strippedInput = input.replaceAll("\\W", "");
System.out.println("Your string: " + strippedInput);
[^\w]
は非Word文字と一致するため、上記の正規表現はすべての非Word文字と一致して削除します。
RegExを使用したくない場合(問題を考えると非常に不要なようです)、おそらく次のようなものを試してください。
public String modified(final String input){
final StringBuilder builder = new StringBuilder();
for(final char c : input.toCharArray())
if(Character.isLetterOrDigit(c))
builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
return builder.toString();
}
String
内の基になるchar[]
をループし、それが文字または数字の場合にのみchar
を追加します(すべてのシンボルを除外します。 )小文字のchar
を追加します。