2016-12-07 12 views
0

私の状況に似た質問を見つけることができませんでしたので、何か不足していないことを願っています。Javaでフォーマットされた配列を印刷したい

私は文字列の配列を持っています。 3行ごとにカンマとスペースでそれぞれの行に印刷したいと思います。

public static void Modify(String stringSearch) 
{ 
    ArrayList<String> records = new ArrayList<String>(); 
    try { 
     File file = new File("Temp.txt"); 
     input = new Scanner(file); 
    } 
    catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 

    if (input.hasNext()) { 
     while (input.hasNext()) 
     { 
      String firstName = input.next(); 
      String lastName = input.next(); 
      String phoneNumber = input.next(); 

      if ((Objects.equals(firstName, stringSearch)) || (Objects.equals(lastName, stringSearch)) || (Objects.equals(phoneNumber, stringSearch))) { 

       records.add(firstName); 
       records.add(lastName); 
       records.add(phoneNumber); 
      } 
     } // end while 
    } 
    int size; 
    size = (records.size())/3; 
    System.out.printf("Found %d records:%n", size); 

    String[] Array = records.toArray(new String[0]); 

    for (int s = 0; s < Array.length; s++) { 
     System.out.printf("%s", Array[s]); 
    } 
} 

は、私が試してみて、それをフォーマットするために、文字列配列にArrayListに変換しています:

は、ここに私の方法です。私は非常にJavaに新しいと時間のクランチでプロジェクトに取り組んでいます。私はそれがまさにこのように印刷する必要がある

:それはこのように印刷され

1) Garcia,  John  505-338-2567 
2) John,  Joseph 212-780-3342 

は2枚のレコードが見つかり

GarciaJohn505-338-2567JohnJoseph212-780-3342 
+0

何が問題なのですか?あなたは何を理解していますか?質問は何ですか? –

+0

私の投稿を編集しました。私はコンマとスペースで番号付きリストに出力をフォーマットする必要があります! – presence

答えて

0

のJava:

は2つのレコードを発見しましたオブジェクト指向言語なので、それを使うべきです。

firstNameで、lastNameをごPersonを表すクラスを作成し、phoneNumberなどの分野

次に、2つのオブジェクトを含むList<Person>を作成し、そのリストを印刷する方法を記述します。すでに使用しているSystem.out.printf()は、好きなように列に値を出力できます。

0

自分のニーズに合ったデータ構造をtoString()で作成する必要があります。

ような何か:

public class PersonalCustomerData { 
    private String firstName; 
    private String lastName; 
    private String phoneNumber; 


... 


    @Override 
    public String toString() { 
     return lastName + "," + " " + firstName + " " + phoneNumber; 
    } 
} 

そして、彼の答えで述べた@Andreasとして、あなたはまた、あなたがそれを反復するとき、あなたは完全にフォーマットされた出力を印刷することを、Collection<PersonalCustomerData>が必要です

private Collection<PersonalCustomerData> col; 

// init the collection + do stuff... 

public void printCustomerData() { 
    int lineNumber = 0; 

    for(PersonalCustomerData pcd : col) { 
     lineNumber++; 

     System.out.println(lineNumber + ")" + " " + pcd); 
    } 
} 
0

objectを使用して値を格納したくない場合は、自分の計画に従ってください。このコードを使用してformatで印刷することができます。

この置き換え:このような何かにこのライン

for (int s = 0; s < Array.length; s++) { 
    System.out.printf("%s", Array[s]);` 

を交換

int numberOfLine = 1; // Counter of words per line 
    String[] Array = records.toArray(new String[0]); 
    for(String str : Array) { 
     String strSperator = ""; 
     switch (numberOfLine) { 
     case 1: 
      strSperator = ", "; 
      numberOfLine++; 
      break; 
     case 2: 
      strSperator = "  "; 
      numberOfLine++; 
      break; 
     case 3: 
      strSperator = "\n"; 
      numberOfLine = 1; 
      break; 
     } 
     System.out.printf("%s%s",str,strSperator); 
    } 
0

:これまで

 String[] Array = records.toArray(new String[0]); 
    for (int s = 0; s < Array.length; s++) { 
     System.out.printf("%s", Array[s]); 
    } 

を。私はコードをテストしなかったので、小さなタイプミスやそうでないものがあります。私はこれがあなたが望むことをすると思います。

Andreasは言ったように、あなたが人のクラスを作ると良いでしょう。それはより組織化され、おそらく理解しやすいように見えます。

int counter = 1; 
System.out.print(records.get(0) + ",\t") 
while (counter !=records.size()) 
{ 
if(counter %3 ==0) 
System.out.println(records.get(counter)); 
else if(counter% 3== 1) 
System.out.print(records.get(counter) + ",\t"); 
else 
System.out.print(records.get(counter)+ "\t"); 
counter ++; 
} 

あなたの最初の要素は常に最初の名前になりますので、2番目の要素は、姓と3番目の要素になりますが、私はその後、最初に最初の改造と私は信じてすべてを処理する必要がありますwhileループを印刷、携帯電話の番号です。

関連する問題