2016-10-13 5 views
0

の最後の文字と私たちの課題の一環として、我々は最初の文字列を返すのいずれかのメソッドを持つクラスを作成していました各単語の文字または各単語の最後の文字。Javaのループ - 最初の文字列と私はサンノゼでのプログラミングのクラスにイントロで、現在午前すべての単語

インスタンス変数「という語句は、」方法でアクセスされるフレーズを保持します。連続した2がありことはありません

単語はスペースで区切られ、それは文字で始まる 、それがスペースで終わっていない 、 決して2つの連続したスペースがあり、 :ここ

がルールです数字または句読点。

firstLetter(両方)とフレーズが空の場合lastLetter()メソッドは空の文字列を返す必要があります。

私の質問は:この問題へのより効率的な解決策は何ですか?私はアルゴリズムに慣れていないので、このシンプルな問題にもっと慣れたアプローチに感謝します。 firstLetter()メソッドとlastLetter()メソッドでは、forループ内で一度に2文字のステータスをチェックするのか、それとも1つだけをチェックするのでしょうか?ここで

は私のコードです:

/** 
* Processes first and last letters of words 
* @author (Adrian DeRose) 
*/ 
public class StartToFinish 
{ 
    private String phrase; 

    /** 
    * Constructs a StartToFinish object 
    * @param myString the phase for this object 
    */ 
    public StartToFinish(String myString) 
    { 
     this.phrase = myString; 
    } 

    /** 
    * Gets first letter of every word in string. 
    * 
    * @return first letter of every word in string 
    */ 
    public String firstLetters() 
    { 
     String firstLetters = ""; 

     if (Character.isLetter(this.phrase.charAt(0))) 
     { 
      firstLetters += this.phrase.substring(0,1); 
     } 

     for (int i = 1; i < this.phrase.length(); i++) 
     { 
      char currentCharacter = this.phrase.charAt(i); 
      String previousCharacter = Character.toString(this.phrase.charAt(i-1)); 
      if (Character.isLetter(currentCharacter) && previousCharacter.equals(" ")) 
      { 
       String characterString = Character.toString(currentCharacter); 
       firstLetters += characterString; 
      } 
     } 
     return firstLetters; 

    } 

    /** 
    * Gets last letter of every word in string. 
    * 
    * @return last letter of every word in string 
    */ 
    public String lastLetters() 
    { 
     String lastLetters = ""; 
     char lastCharacter = this.phrase.charAt(lastIndex); 

     if (this.phrase.length() == 0) 
     { 
      return ""; 
     } 

     for (int i = 1; i < this.phrase.length(); i++) 
     { 
      char currentCharacter = this.phrase.charAt(i); 
      char previousCharacter = this.phrase.charAt(i-1); 

      if (Character.isLetter(previousCharacter) && !Character.isLetter(currentCharacter)) 
      { 
       String previousCharacterString = Character.toString(previousCharacter); 
       lastLetters += previousCharacterString; 
      } 
     } 

     if (Character.isLetter(lastCharacter)) 
     { 
      lastLetters += Character.toString(lastCharacter); 
     } 

     return lastLetters; 
    } 
} 

ありがとうございました!

+2

が、あなたはちょうどそれが見直されたいです。 com。 – csmckelvey

+2

私は作業コードに関する質問であるため、この質問を議論の対象外としています。それはhttp://codereview.stackexchangeでよりよく適合します。COM/ –

+1

最初の手紙を保管してください: 's.replaceAllを| "'最後の手紙を保管してください:' s.replaceAllを((、" "(<= \\ S)\\ S +(\\はね$)?")」(\\ s | ^)\\ S +(?= \\ S) "、" "' [Demo](http://ideone.com/XfJb4Q)。 – dasblinkenlight

答えて

1

これはあなたが探しているものであれば、私は知りませんが、これは(私の英語のため申し訳ありません)同じことを書くための方法

String a="john snow winter is comming"; 
    String[] parts = a.split(" "); 
    for(String word:parts){ 
     System.out.println("first letter "+word.charAt(0)+ " last letter "+word.charAt(word.length()-1)); 
    } 
1

はるかに簡単です、私はあなたが持っているそうは思いませんこれらすべてのコードを記述することは、単にJavaの機能を使用します。

 String a = "Hello"; 
     System.out.println("First:"+a.charAt(0)); 
     System.out.println("Last:"+a.charAt(a.length()-1)); 

出力:私が提供するソリューションの

First:H 
Last:o 
0

一つは次のとおりです。 1.コンストラクタでフレーズが空であることを確認します。 2.分割を開始して、何らかのチェックを行います。コンストラクタで

(これはところで、あなたのケースで必要とされていない)

splitedPhrase = phrase.split(' '); 
専用の機能で

public String firstLetters() { 
String result = ""; 
for(String word : splitedPhrase) { 
    if (Character.isLetter(word.charAt(0))) 
     result+=word.charAt(0); 
} 
return result; 
} 

そして、あなたは同じように、LastLetter機能のためのcharAtを変更する必要があります word.charAt(word.length-1)

このヘルプは、すでに投稿されているにもかかわらず、私はこれがあなたの臓器が必要とするものをうまくやると思います。

0

私が正しくあなたの質問を理解していれば、私は、これはあなたが探しているものだと思う: - codereview.stackexchangeでそれを投稿し、コードが動作する場合

public class StartToFinish { 

    private String phrase; 
    private String[] words; 

    private String firstLetters = ""; 
    private String lastLetters = ""; 

    /** 
    * Constructs a StartToFinish object 
    * 
    * @param myString 
    *   the phase for this object 
    */ 
    public StartToFinish(String myString) { 
     this.phrase = myString; 
     words = phrase.split(" "); 

     for (String string : words) { 
      if (string.length() == 0) 
       continue; 

      if (Character.isLetter(string.charAt(0))) { 
       firstLetters += string.charAt(0); 
      } 

      if (Character.isLetter(string.charAt(string.length() - 1))) { 
       lastLetters += string.charAt(string.length() - 1); 
      } 
     } 
    } 

    /** 
    * Gets first letter of every word in string. 
    * 
    * @return first letter of every word in string 
    */ 
    public String firstLetters() { 
     return firstLetters; 
    } 

    /** 
    * Gets last letter of every word in string. 
    * 
    * @return last letter of every word in string 
    */ 
    public String lastLetters() { 
     return lastLetters; 
    } 
} 
関連する問題