有没有办法扫描ArrayList中的索引? .nextint .nextln等?

时间:2013-09-30 11:55:21

标签: java arraylist split

我有一个名为data的ArrayList。

数据中的每个索引都包含一行单词和数字。 例如:

data(0) contains: Bob Sinclair, BS776, 87.5, 23.4, 20.1, 50.2

data(1) contains: Paul Paulson, PP009, 98.3, 12.6, 34.0, 22.5

...再加上8个

有没有办法可以将每个对象分成6个对象(姓名,学号,分数1,分数2,分数3,分数4)?

之后我需要将得分总计加在一起,但我不是要求帮助那个部分,只是提到它,因为数字不能是一个字符串,因为它们需要被添加(或者它们可能是一个字符串,/耸肩,我是菜鸟。

8 个答案:

答案 0 :(得分:2)

是的,有一种方法可以给猫皮肤涂抹:

首先:String.split()

String[] parts = inputString.split(','); //split the input
String name = parts[0];                  //get first part. 
double[] scores = new double[4];         //create array for doubles 
for(int i=0; i<4; i++) {                 //fill array of doubles --> array index checking might be needed!
    scores[i]=Double.parseDouble(scores[i+2]);
}

但是,由于这涉及浮点数,你应该阅读What Every Computer Scientist Should Know About Floating-Point Arithmetic,为什么他们可以显示有趣的结果......或者,你可以使用BigDecimals

BigDecimal exactResult = BigDecimal.valueOf(scores[i+2]);

第二种可能性:Scanner

Scanner s = new Scanner(inputString);
s.useDelimiter(",");
String name = s.next();
double[] scores = new double[4];         //create array for doubles 
String someCode = s.next();
for(int i=0; i<4; i++) {                 //fill array of doubles 
    scores[i]=Double.parseDouble(s.next()); //null check might be needed!
}

第三:使用模式

//this pattern is very ugly (unsacalable, unmaintainable), but should work for now as poc...
Pattern p = Pattern.compile("([^,]*),\\s*([^,]*),\\s*([^,]*),\\s*([^,]*),\\s*([^,]*),\\s*([^,]*)");
Matcher m = p.matcher(inputString);
if(matcher.matches()) {
   String name = group(1);
   String someCode = group(2);
   double[] scores = new double[4];         //create array for doubles 
   for(int i=0; i<4; i++) {                 //fill array of doubles 
      scores[i]=Double.parseDouble(s.group(i+3)); //null check might be needed!
   }
}

答案 1 :(得分:0)

它们可以是字符串,然后您可以使用字符串split方法将它们分成6个字符串,并使用Float.parseFloat(“此处为字符串格式的数字”)。

指向类API的链接:http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#parseFloat(java.lang.String)

答案 2 :(得分:0)

这就是你在Object Oriented Programming

中所做的

即。创建一个包含属性Student

的班级Name, Student Number, Score1, Score2, Score3, Score4
class Student {
  String name;
  int num;
  int score1;
  int score2;
  int score3;
  int score4;
  // getters setters here
}

并从Student的每个元素中填充此ArrayList类的实例。

List<Student> slist = new ArrayList<Student>();
for (String str : list) {
    String[] arr = str.split(",");
    // some validation here for generated arr
    student student = new Student();
    student.setName(arr[0]);
    student.setName(Integer.parseInt(arr[1]));
    // populate rest of fields
    slist.add(student);
}
System.out.println(slist);

答案 3 :(得分:0)

喜欢这个

for (String str : data) {

      //use split with , on each string here

            }

答案 4 :(得分:0)

你可以创建一个类,它获取一个数据对象,我想它是一个字符串,作为构造函数的参数。

如果是字符串,您可以将其分隔为string.split(",");

通过您的课程,您可以轻松创建方法以获得所有想要的值。

答案 5 :(得分:0)

List<String> list = new ArrayList<String>();
list.add("Bob Sinclair, BS776, 87.5, 23.4, 20.1, 50.2");
list.add("Paul Paulson, PP009, 98.3, 12.6, 34.0, 22.5");
for (String str : list) {
String[] parts = str.split(", ");
// create structure which you need and put data there
// parts[0] - student, etc.
}

答案 6 :(得分:0)

您需要将数据打包到一个类中,然后将该类的实例存储在ArrayList中。

假设你有一个班级Player

public class Player {

    private String name;
    private List<Float> scores;

    public Player(String name){

    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<Float> getScores() {
        return scores;
    }
    public void setScores(List<Float> scores) {
        this.scores = scores;
    }
}

然后,您将创建ArrayList为List<Player> players = new ArrayList<Player>

使用Player对象的getter和setter,您可以检索每个单独的属性并按照您喜欢的方式处理它们。

因此,要获得该实例的名称,您可以: 对于存储在播放器类中的任何变量,players.get(0).getName()或相同。

答案 7 :(得分:0)

使用split类中的String方法,假设data具有List<String>类型,并且每一行都具有您所描述的结构:

for(String s: data) {
    String[] line = s.split(",");
    // use each element in line
    String studentName = line[0];
    String studentNumber = line[1];
    double score1 = Double.parseDouble(line[2]);
    double score2 = Double.parseDouble(line[3]);
    double score3 = Double.parseDouble(line[4]);
    double score4 = Double.parseDouble(line[5]);
}