2016-05-02 10 views
1

私はハングマンゲームを作っています。すべての文字(大文字と小文字)をアンダースコアに変更したい。ここに私のコードは次のとおりです。すべての文字を下線に置き換える方法

_answer = "HANGMAN"; 
    Log.i("Word", "Answer orig: " + _answer); 
    _answer = _answer.replaceAll("/[a-zA-Z]+/g", "_"); 
    Log.i("Word", "Answer underscore: " + _answer); 

出力は次のとおりです。

Answer orig: HANGMAN 
Answer underscore: HANGMAN 

私のコードでは、アンダースコアに手紙を交換しませんでした。

+1

スタート正規表現から先頭と末尾の '/'と 'G'を除去することによって。彼らはそこに属しません。これらは、引用やオプションの指定の代わりに他の言語で使用されます。 – Andreas

+0

ええ、それらはPerl/vimです。 Javaはその構文を使用しません。 – markspace

+0

あなたがハングマンゲームを開発しようとしている場合、より良い方法は、単純な 'char'配列を使用して' _answer'を呼び出すときです。 配列のルックアップは、正規表現よりもはるかに高速でエラーの発生が少なくなります。 さらに、文字が推測されると、正規表現の管理が面倒になることがわかります。 – Nosh

答えて

10

"各"文字をアンダースコアに変更する必要があります。

public static void main(String[] args) throws Exception { 
    String _answer = "HANGMAN"; 
    _answer = _answer.replaceAll("[a-zA-Z]", "_"); // replace each letter with an "_" 
    System.out.println(_answer); 

} 

O/P:

_______ 

注:また、あなたは、このような正規表現を指定することができ、それの場合、いくつかのプログラミング言語で非感受性

_answer = _answer.replaceAll("(?i)[a-z]", "_"); 
1

作るために(?i)を使用することができます:

/[a-zA-Z]+/g 

これは正規表現を定義するための言語固有の構文であり、gは「グローバル」を意味します。つまり、必要な回数だけ繰り返します。

Javaでは、正規表現は文字列リテラルとして与えられます。特別な正規表現構文はありません。

gオプション

は使用されませんが、あなたは右の方法を選択することで、同じ動作を得る: replaceFirst()は一度だけの意味、および[ replaceAll()][1]g(グローバル)オプションを指定するのと同じです。

したがって、replaceAll("/[a-zA-Z]+/g", "_")replaceAll("[a-zA-Z]+", "_")である必要があります。

gがいない場合は、replaceFirst("[a-zA-Z]+", "_")を使用していました。


ただし、を "アンダースコアにすべての文字(下限と大文字)を変更" と述べました。 「単一文字(アンダースコア)」のすべての文字か、「アンダースコアの文字」を意味しましたか?

後者の場合、これらのいずれかを使用:

replaceAll("[a-zA-Z]", "_") 
replaceAll("(?i)[a-z]", "_")  // Flag: CASE_INSENSITIVE 
replaceAll("\\p{Alpha}", "_")  // POSIX: An alphabetic character [\p{Lower}\p{Upper}] 

// For non-english letter support: 
replaceAll("(?U)\\p{Alpha}", "_") // Flag: UNICODE_CHARACTER_CLASS 
replaceAll("\\p{L}", "_")   // Unicode letter category 
-1
public static void main(String[] args) 
{ 
    String word = "HUNUMAN"; 
    StringBuilder gletters = new StringBuilder("_"); 
    String mainword = word.replaceAll("[^" + gletters + "]", "_"); 
    System.out.println(mainword); 
} 
+0

文字列作成ツールを使用するのはどうしてですか? – karina

+0

これは、_によってすべての文字(文字だけでなく) – Henry

関連する問題