输入ArrayList

时间:2010-09-21 05:43:55

标签: java input arraylist

我在将输入String格式化为ArrayList时遇到问题。我评论了一些我尝试过的东西。最初我尝试将输入放入字符串然后添加到arrayList。

输入是一个长字符串:

(A,Name1,200), (A,Name1,200), (R,Name1,200), (A,Name2,900), (A,Name2,500), (A,Name3,800), (A,Name4,150), (A,Name5,850), (A,Name6,750), (A,Name7,950), (A,Name8,250), (R,Name6,750), (A,Name10,450), (A,Name11,1000)*emphasized text*

到目前为止我所拥有的:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

/**
 *
 * @author Joshua
 */
public class HighScore {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)
    {
/**


    Scanner sc = new Scanner(System.in);
    String scores = sc.nextLine();

    scores = scores.replace('(', '"');
    scores = scores.replace('(', '"');

    StringBuffer str = new StringBuffer(scores);

   for (int i = 0; i < scores.length(); i++)

   {
    if (scores.charAt(i) == ',')

    {  
       str.insert(i, 'H');
    }
   }
      System.out.println(str);

*/
      ArrayList<Score> list = new ArrayList<Score>();
      ArrayList <Score> topscore = new ArrayList<Score>();

/**      
      list.add (new Score("A","1111",99999));
      list.add (new Score("A","2222",88888));
      list.add (new Score("A","3333",77777));
      list.add (new Score("A","4444",66666));
      list.add (new Score("A","5555",55555));
      list.add (new Score("A","6666",44444));
      list.add (new Score("R","4444",66666));
      list.add (new Score("A","7777",22222));
      list.add (new Score("A","8888",11111));

*/
      Collections.sort(list);



//For loop to add all the high scores with 'A' as the command to the ArrayList topscore

       for(Score addScore : list)
       {
           if (addScore.getCommand().equalsIgnoreCase("A"))
           topscore.add(addScore);
       }

//For loop to remove all the high scores with 'R' as the command from the ArrayList topscore

       for(Score remScore : list)
       {
           if (remScore.getCommand().equalsIgnoreCase("R"))
                  for (int i = 0; i < topscore.size(); i++)
                  {
                   if (remScore.getName().equals(topscore.get(i).getName()))
                       if(remScore.getScoreValue() == topscore.get(i).getScoreValue())
                            topscore.remove(i);
                  }
       }


//Prints the finished finalScore list

      for(Score finalScore : topscore)
       {
        System.out.println(finalScore);
       }





    /**

    String s[]=new String[100];
    for(int i=0;i<s.length;i++)
        {
        s = scores.substring(1, scores.length()-1).split("\\), \\(");
        }

*/

 sc.close();
 }
}

2 个答案:

答案 0 :(得分:2)

你也可以使用正则表达式和capturing groups

来完成
public static void main(String[] args) {

    String input = "(A,Name1,200), (A,Name1,200), (R,Name1,200), (A,Name2,900), (A,Name2,500)";
    Pattern p = Pattern.compile("\\(([A,R]?),(\\w+?),(\\d+?)\\)");
    Matcher m = p.matcher(input);

    ArrayList<Score> scores = new ArrayList<Score>();
    ArrayList<Score> topScores = new ArrayList<Score>();

    while (m.find()) {
        String action = m.group(1);
        String name = m.group(2);
        double scoreVal = Double.valueOf(m.group(3));

        Score score = new Score(name, scoreVal);
        scores.add(score);

        if ("A".equalsIgnoreCase(action)) {
            topScores.add(score);
        } else { // remove
            for (Score topScore : topScores) {
                // make sure you have implemented equals() in the Score class
                if (topScore.equals(score)) {
                    topScores.remove(score);
                }
            }
        }
    }

    // Prints the finished finalScore list
    for (Score finalScore : topScores) {
        System.out.println(finalScore);
    }
}

答案 1 :(得分:1)

将此作为伪代码使用。

public static void main(String[] args) {
    String input = "(A,Name1,200), (A,Name1,200), (R,Name1,200), (A,Name2,900), (A,Name2,500)";
    String[] scoreSets = input.split("\\),");
    List<Score> scoreList = new ArrayList<Score>();
    for (String score : scoreSets) {
        score = score.trim().substring(1);
        int closeBrace = score.indexOf(')');
        if (closeBrace == score.length() - 1) {
            score = score.substring(0, score.length() - 1);
        }
        String[] tokens = score.split(",");
        scoreList.add(new Score(tokens[0],tokens[1],Double.valueOf(tokens[2])));
    }

}