2016-01-05 17 views
5

私は母音プログラムを修正する方法を知りました。私は多くのフォーラムで検索しましたが、運がなかった。研究室の説明は、 "文字列の母音をすべて数字に変更することです。数字の範囲が0-9で、数字が9より大きい場合は0にリセットしてください。"したがって、サンプル入力は "abcdef"になり、サンプル出力は "0bcd1f"になります。母音に置き換えられた文字列Java

私のメインのコードが

public class VowelCounter 
{ 
    public static String getNumberString(String s) 
    { 
     int counter = 0; 
      for(int i = 0; i<s.length(); i++) 
      {char g = s.charAt(i); 
      if(g =='a') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='e') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='i') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='o') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='u') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='A') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='E') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='I') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='O') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      else if(g =='U') 
      { 
       counter++; 
       s.replace(g,counter); 
      } 
      } 
     return s; 
    } 
} 

あるランナークラスは、私が経験していますエラーが置き換える方法である

public class VowelCounterRunner 
{ 
    public static void main (String[] args) 
    { 
     System.out.println(VowelCounter.getNumberString("abcdef")); 
     System.out.println(VowelCounter.getNumberString("hhhhhhh")); 
     System.out.println(VowelCounter.getNumberString("aaaaaaa"));  
     System.out.println(VowelCounter.getNumberString("catpigdatrathogbogfrogmoosegeese")); 
     System.out.println(VowelCounter.getNumberString("hhhhhhh1234356HHHHDH")); 
     System.out.println(VowelCounter.getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj")); 
     System.out.println(VowelCounter.getNumberString("")); 
     System.out.println(VowelCounter.getNumberString("x")); 
     System.out.println(VowelCounter.getNumberString("e")); 

    } 
} 

です。 "replace(char、int)のメソッドが見つかりません。メソッドjava.lang.String.replace(char、char)は適用できません;(引数の不一致; intからcharへの不可逆変換の可能性あり) これは私の最初のプログラミングクラス、私はこの問題を解決する方法について正直に無知だ。

答えて

5

あなたはint値で置き換えを呼び出しています - javaはこのintを文字に自動変換しません。 intを人間が読めるcharに明示的に変換する必要があります。ここでは、迅速かつ汚い修正です:

変更

s = s.replace(g,(counter+"").charAt(0)); 

へのすべてのs.replaceの呼び出しあなたが代わるが固定されている場合でも、あなたのコード内の他の問題が残っているでしょう。動作するはずコード:

s = s.substring(0,i) + counter + s.substring(i); 

concatentation演算子(+)は、あなたのためにテキストに変換しているため、これはint型の値の明示的な変換を必要としない理由があります。

概要:Javaでは

  • 、種類は単に混在させないでください - int != charを、あなたはそれが

  • s.replaceを変換したいかをコンパイラに伝える必要があります変化にsには何も発生しませんss.replaceの結果に設定する必要があります。開始時にあなたの頭を包み込むのは難しいですが、練習でそれを手に入れてください。

  • s.replace私はあなたがコンパイルエラーが(replace法上のJavadocを参照してください)あなたの手掛かりを与えている

5

のJava String不変で、あなたはreplaceの結果を代入していない(それはあるので、私は、StringBuilderを好むだろう変更可)次に、switchを使用すると、私の意見では、ここでは読みやすくなります。for-each loopと同様に、それをまとめると、

のようになります
public static String getNumberString(String s) { 
    if (s == null || s.isEmpty()) { 
     return ""; 
    } 
    StringBuilder sb = new StringBuilder(s.length()); 
    int counter = 0; 
    for (char ch : s.toCharArray()) { 
     switch (Character.toLowerCase(ch)) { 
     case 'a': case 'e': case 'i': case 'o': case 'u': 
      sb.append(counter); 
      counter++; 
      if (counter > 9) { 
       counter = 0; 
      } 
      break; 
     default: 
      sb.append(ch); 
     } 
    } 
    return sb.toString(); 
} 
1

をしたいとは思わないこれは、同じもので、その文字列内の文字のすべてのインスタンスを置き換えます。あなたは文字を置き換えるために整数を使用しようとしているので、母音を母音を '1'や '2'のような数字の文字値に置き換えることです。

また、文字列の置換を呼び出すと、文字列の新しいコピーは、あなたがあなたが望む効果を得ることはできません置換を呼び出しています。ここで少し異なる考えて(配列、StringBuffersなど)

0

ここに行く、

import java.util.*; 
import java.lang.*; 

class Rextester 
{ 
    public static final int ASCII_0 = 48; 
    public static String getNumberString(String s) 
    { 
     int counter = 0; 
     for(int i = 0; i<s.length(); i++) 
     { 
      char g = Character.toLowerCase(s.charAt(i)); 
      if(g =='a' || g =='e' || g =='i' || g =='o' || g =='u') 
      { 
       StringBuilder sb = new StringBuilder(s); 
       sb.setCharAt(i, (char) (counter + ASCII_0)); 
       s = sb.toString(); 
       counter = (counter + 1) % 10; 
      } 
     } 
     return s; 
    } 

    public static void main(String args[]) 
    { 
     System.out.println(getNumberString("abcdef")); 
     System.out.println(getNumberString("hhhhhhh")); 
     System.out.println(getNumberString("aaaaaaa"));  
     System.out.println(getNumberString("catpigdatrathogbogfrogmoosegeese")); 
     System.out.println(getNumberString("hhhhhhh1234356HHHHDH")); 
     System.out.println(getNumberString("AEIOUaeiou87878alkjdaslwlejrlajflawjkflwj")); 
     System.out.println(getNumberString("")); 
     System.out.println(getNumberString("x")); 
     System.out.println(getNumberString("e")); 
    } 
} 

がアウト置く

0bcd1f 
hhhhhhh 

c0tp1gd2tr3th4gb5gfr6gm78s9g01s2 
hhhhhhh1234356HHHHDH 
lkjd1slwl2jrl3jfl4wjkflwj 

x 
0 

のを与えるとしての私の実験を見てください。よく:http://rextester.com/CEIUP1959

関連する問題