2017-01-25 10 views
0

このコードの主な考え方は、特定の位置にある文字を置き換えることです。このコードをコンパイルしようとすると、私には何も与えません、もしtext2なら(例えば:text2 = "lll" 。。ヒントに私に私の問題を解決する方法を与えることができれば私に「LLL」を示し:)N番目の位置にある文字を置換する

public static void main(String[] args) 
{ 
    String text3 = "Yeaaaaah"; 
    replaceNth(text3, 1, 'a', 'o'); 
} 

public static String replaceNth(String text, int n, char oldValue, char newValue) 
{ 
    String text2 = ""; 
    char[] array1 = text.toCharArray(); 

    for (int i = 0; i < text.length(); i++) { 
     if (array1[i] == oldValue) { 
      if (i == n) { 
       array1[i] = newValue; 
       text2 = text.substring(0) + array1[i] + text.substring(i + 1); 
      } else { 
       break; 
      } 
     } else { 
      break; 
     } 
     System.out.println(text2); 
    } 

    return text2; 
} 
+1

あなたはあなたのコードのフォーマットへの努力のささやかを入れていただけますか?ありがとう。 – NPE

+0

あなたのコードは実行可能なJavaScriptスニペットではありません***。 –

+2

予想される結果は何ですか?そのプログラムを実行することによって(「Yeaaaaah」を入力として使用して)何が得られますか? – Luke

答えて

0

は、ステップバイステップのプログラムを分析します。 forループから開始します。最初に、array1 [i]が古い値と等しいかどうかをチェックします。 i == 0の場合、それは明らかに偽です( 'Y'!= 'a')。それは真ではないので、elseブロックを実行します:break;これは、ループから抜け出し、次のステートメント(System.out.println)で実行を継続することを意味します。 Boom、文字列に何も起こらず、 ""に初期化されたので、空のStringを返します。 array1 [0] == oldChar、しかしn!= 0(ヒント:内側のifを見てください)が起きたらどうなるか考えてみてください。解決方法:elsesを削除します。

問題は、oldCharのn番目のオカレンスを置き換える必要があるため、繰り返し実行している間に一致した文字の数をカウントする必要があります。次のようなものがあります。

for(int i=0; i<text.length; i++) { 
    if(textChars[i]==oldChar) matches++; 
    if(matches % n == 0) textChars[i] = newChar; //will match n, 2n, 3n,... 
} 
return String.valueOf(textChars); 
+0

また、適切と思われる場合は、回答を受け入れて回答を受け入れることもできます。ちょうど – Luke

+0

と言っていただきありがとうございます。あなたの答えは本当に役に立ちます。残念ながら、私は投票できません。とにかくそれを受け入れました。 – Sabina

+0

右、担当者の制限を忘れました。心配しないで、喜んで助けました。 – Luke

1

私は昨日、これを作った:

/* 
Changes a character in a string with a character that you enter and returns the new string. 
int i - character position 
char c - new character 
String msg - string that you are editing 
*/ 

public class StringRemastered { 
    public String setCharAt(int i, char c, String msg){ 
     char[] msgArray = msg.toCharArray(); 
     msgArray[i] = (char) c; 
     msg = String.valueOf(msgArray); 
     return msg; 
    } 
} 

入力の場合:

2, 'o', "Yeaaaaah" 

戻り値は次のようになります。

Yeoaaaah 
0

私の見解からは、関数のパラメータとして 'oldValue'を使用する必要はありません。文字列与えられた内部の単一指定された文字を置き換える機能の可能性の一つを見てください:

  1. は、与えられた 'の新しい値を設定
  2. 、与えられた文字列(「言葉」)からのすべての文字のリストを作成します。 position '、
  3. StringBuilderを作成し、すべての文字(変更された1文字)をString' result 'に結合します。

    public static String replaceCharAtSpecificPosition(String word, int position, char newValue){ 
    
        List<Character> chars = word.chars() 
          .mapToObj(s -> (char)s) 
          .collect(Collectors.toList()); 
    
        chars.set(position, newValue); 
    
        StringBuilder result = new StringBuilder(); 
    
        for(char eachChar: chars){ 
         result.append(eachChar); 
        } 
    
        return result.toString(); 
    } 
    

メインの内側に、このソリューションを使用しての例:それは読みやすいですよう

String word = "Yeeaaahh"; 

    String changedWord = replaceCharAtSpecificPosition(word, 2, 'Z'); 

    System.out.println(changedWord); 
    //result: YeZaaahh 
関連する問題