我有一个名为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)?
之后我需要将得分总计加在一起,但我不是要求帮助那个部分,只是提到它,因为数字不能是一个字符串,因为它们需要被添加(或者它们可能是一个字符串,/耸肩,我是菜鸟。
答案 0 :(得分:2)
是的,有一种方法可以给猫皮肤涂抹:
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 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]);
}