2017-03-24 30 views
-1

私はJavaの初心者です。このパズルをしばらく取り組んできました。 文字列内の文字を1つずつ単語、単語、プログラムの順に通過させ、最初の文字が母音の場合は、文字列内の次の2文字を消去します。 文字が消去された後、プログラムは次の文字に進み、同じテストを実行します。母音の場合は、次の2つを消去し、そうでない場合は、文字を印刷して次の文字に移動します。 たとえば、 'liberty'のようなランダムな単語は次のようになります。 'lirty' 'banana'は 'ban'に変更されます。 「カラメル」は「来た」となります。文字列、Javaの特定の文字の後に文字/文字を置き換えます。

これを達成するための基本的で簡単な方法はありますか?

ありがとうございました!この問題を解決する方法について

種類よろしく ///マグナス

+1

をあなたはまだ何を試しましたか?コードのサンプルがありますか? – NewBie1234

+0

[String class](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html)を参照してください。charAt(int index)、replace(char oldChar、char newChar )、そしてあなたのプロジェクトに役立つメソッド()があります。 – AimeTPGM

+0

「バナナ」がバナになることを意味すると思います。最初の「a」は中間の2文字(「na」)を削除し、最後の「a」はそのまま残しています。正規表現で簡単にこれを行うことができますが、それはあなたが探しているものではない可能性があります。とにかく、 'output = input.replaceAll("([aeiou])??、 "$ 1"); 'となります。デモについては、[regex101](https://regex101.com/r/KduWCQ/1)を参照してください。 – Andreas

答えて

0

基本的な考え方: 2例があります。最初の文字は母音か母音ではない。 これは、我々があれば、そのように行うの前に、我々はそれを行うことができます例独立した最初の文字を印刷したいので、私たちは次のような構造

if(isVowel(firstLetter)){ 
    //handle case with first letter a vowel 
}else{ 
    //handle other case 
} 

を必要とすることを意味します。 どちらの場合でも、関数を再帰的に呼び出すことができます。 母音の場合、部分文字列を3から最後まで取ります。

str.subString(3, str.length()-1); 

そして最後には、エッジケースを忘れないでください:あなたは空の文字列を渡したらどうなりますか? 最初の文字は母音ですが、後に1文字しかないのですか?次の実装で この結果:

public void printSpecial(String str){ 
    if(str==null || str.isEmpty()){ 
     return; //No letters to print 
    } 
    char firstLetter = str.charAt(0); 
    System.out.print(firstLetter); //print the current letter 

    if(isVowel(firstLetter)){ 
     if(str.length()<4){ 
      return; //Not enough letters to continue 
     } 
     printSpecial(str.substring(3, str.length()-1)); 
    } else { 
     if(str.length()==1){ 
      return; //Last letter done 
     } 
     printSpecial(str.substring(1, str.length()-1)); 
    } 
} 

だから唯一の事は法に

public boolean isVowel(char letter){ 

} 

を実装されてやって左しかし、私はあなたに、このアップを残しておきます:)

+0

クイックノート:このコードが実際に動作するかどうか、またはインデックスがすべて正しいかどうかは確認しませんでした。私の考えは、このような問題を解決する一般的な方法を提供することでした。振り返ってみると、自分でコードを書こうとするのは実際にこのサイトの条件に違反していると思います。それでは、私は、まさにこのような種類の問題を解決する方法を人々が理解するのに役立つこの種の答えだと感じています。したがって、長期的には役立つかもしれません。 – Imus

0
public static void main(String[] args) { 
    String str = "caramel"; 
    StringBuilder sb = new StringBuilder(); 
    sb.append(str); 
    System.out.println("Before deletion=" + sb); 
    for (int i = 0; i < sb.length(); i++) { 
     if (sb.charAt(i) == 'a' || sb.charAt(i) == 'e' || sb.charAt(i) == 'i' || sb.charAt(i) == 'o' || sb.charAt(i) == 'u') { 
      if(i==sb.length()-2) 
      {//prevent index out of bounds 
       sb.deleteCharAt(i+1); 
      } 
      else if(i==sb.length()-1) 
      { 
      //prevent index out of bounds 
      } 
      else 
      { //delete 2 charaters 
       sb.deleteCharAt(i+1); 
       sb.deleteCharAt(i+1); 
      } 
     } 
    } 
    System.out.println("After deletion=" + sb); 
} 
+0

ありがとうございます。私は彼らに行くつもりです..! :-) – Maggy77

関連する問題