java - ArrayList 的输入

标签 java input arraylist

我在将输入字符串格式化为 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();
 }
}

最佳答案

您还可以使用正则表达式和 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);
    }
}

关于java - ArrayList 的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757596/

相关文章:

java - Java中为什么可以将方法作为参数添加

java - 在 Windows 中使用 java 查找特定的注册表项

java - 扫描仪输入数组排序

java - 多个数组列表的逻辑连接

java - String.substring(i,j) 方法获取空格而不是实际字符

java - 如何将 ArrayList<Class> 从一个 Activity 传递到另一个 Activity ?

java - 在数字第一次出现时分割字符串的最有效方法?

Java连续输入代码

javascript - jquery中获取radio类型的输入字段的值

c++ - 从文件中获取输入问题 C++