2016-10-06 11 views
-1

forループを使ってStringのすべての母音をcharに置き換えます。ライン上のエラーにJava:引数の左辺は変数charAtエラーでなければなりません。

public String replaceVowel(String text, char letter) 
{ 
    char ch; 
    for(int i = 0; i<text.length(); i++) 
    { 
     ch = text.charAt(i); 
     if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y') 
     { 
      ch = letter; 
     } 
     text.charAt(i) = ch; 
    } 
    return text; 
} 

コード旅行:この行で

text.charAt(i) = ch; 

私は、文字列のループの位置に文字を初期化しようとしています。ただし、次のようなエラーが表示されます。

The left-hand side of an assignment must be a variable

ご迷惑をおかけして申し訳ありません。

+0

エラーを確認します。左側が譲受人、右側が譲渡価額です。 Char値に論理的にchar値を割り当てることはできません。あなたはそれをchar *変数に代入することを躊躇しました* – Li357

+0

Javaの文字列は不変です。文字配列または['StringBuilder'](https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html#setCharAt-int-char-)を使用することができます。 – 4castle

+1

'return text.replaceAll(" [aeiouy] "、String.valueOf(letter));' – 4castle

答えて

2

C++にoppsedとして、Javaメソッドの呼び出しは(C++の参照など)、変数「参照」を返すことはありませんので、あなたはメソッド呼び出しの結果を割り当てることはできません。

また、Java文字列は不変です。つまり、新しい文字列を作成せずに文字列内の個々の文字を変更することはできません。このトピックについては、この投稿Replace a character at a specific index in a string?を参照してください。

0

charAt(index)は、そのインデックスの文字を返します。値の割り当てには使用できません。

このような何かがうまくいく

char ch; 
     String text = "hailey"; 
     char letter = 't'; 
     char[] textAsChar = text.toCharArray(); 
     for(int i = 0; i<text.length(); i++) 
     { 
      ch = text.charAt(i); 
      if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u' || ch == 'y') 
      { 
       ch = letter; 
      } 
      textAsChar[i] = ch; 
     } 
     System.out.println(String.valueOf(textAsChar)); 
関連する問題