Как получить определенный элемент из массива /ArrayList?

62
4

Я пытаюсь получить последний элемент из конца каждой строки моего массива ArrayList/.

Например, у меня есть эти записи в моем списке: (не обращайте внимания на язык, греческие имена)

Nikos Pappas : 321/2012999, C,8.53  
Marios Athanasiou : 321/2012001, A,6.89
Stavroula Markou : 321/2011001, D,7.00
Giannis Kallogirou : 321/2009005, ST, 6.89
Nikoletta Stefanou : 321/2010001, D, 7.25
Stathis Petrou : 321/2011002, E, 8.10
Kostas Tzovalis : 321/2007667, C, 5.00
Michalis Kotsis : 321/2009723, D, 7.12
Maria Katsanou : 321/2012002, C, 5.50

И я хочу взять: 8.53, 6.89,...., 5.50 (отметки студентов)

Это то, что я сделал до сих пор (файл - это файл, который содержит приведенную выше информацию)

  public static void main(String[] args)  {

BufferedReader br = null;
ArrayList <String> list = new ArrayList <> ();

try
{
br = new BufferedReader(new FileReader("C:/Users/Stefi/Desktop/java_ask3.txt"));
String str;

//System.out.print("mpika");

while((str = br.readLine()) != null)
{
list.add(str);
System.out.println(str);
}
}
catch(IOException e)
{
System.out.println("Κάτι πήγε στραβά! Προσπάθησε πάλι.");
}
finally
{
try
{
if (br != null)
{
br.close();
}
}
catch(IOException e2)
{
System.out.println("Δεν μπορεσα να κλείσω το αρχείο.");
}

}

int x = list.size();
String [] array = new String[x];
array = list.toArray(array);

for(int i=0; i<array.length; i++)
{
System.out.println(array[i]);
}

String [] f = new String[list.size()];
String vathmos;

for(int i=0; i<array.length; i++)
{
vathmos = list.get(i).replaceAll("\\D+", "");
f[i] = vathmos;
}

System.out.println("\n\n\n Float Print\n");
for(int i=0; i<array.length; i++)
{
System.out.println(f[i]);
}

}

это пример моего вывода:

3212012999853     
3212012001689
3212011001700
3212009005689

Он принимает все числа, которые он находит. Но я не знаю, как взять только последнее число с плавающей точкой. Я знаю, что совершенно неправильно работать так, и работать так, потому что я никогда не получу поплавок, который я хочу.

Я также попытался преобразовать свой список в массив и взять последний элемент, но не получился.

спросил(а) 2014-01-08T04:54:00+04:00 5 лет, 11 месяцев назад
4
Решение
45

Вы можете попробовать это

String s = line.replaceAll(".*(\\d+\\.\\d+)$", "$1");

ответил(а) 2014-01-08T05:00:00+04:00 5 лет, 11 месяцев назад
Еще 3 ответа
32

Я могу предложить пару функций String для добавления в ваш код. Это не проверенный код, хотя -

Использование String.split();

//This will hold all the numbers as String
List<String> masterList = new ArrayList<String>();
while((str = br.readLine()) != null)
{
String [] lineValues = String.split(",");
int countElements = lineValues.Length();
masterList.Add(lineValues[countElements - 1]);
}

Использование lastIndexOf();


//This will hold all the numbers as String
List<String> masterList = new ArrayList<String>();
while((str = br.readLine()) != null)
{
int lastIndex = str.lastIndexOf(",");
masterList.Add(str.substring(lastIndex, str.length() - 1));
}

После того, как вы заполняете masterList, вы можете пропустить его и извлечь float, используя

 Float.valueOf(masterList.get(i));

ответил(а) 2014-01-08T05:09:00+04:00 5 лет, 11 месяцев назад
34

Если вы храните записи как строки, вы можете использовать метод подстроки:

grade = Double.parseDouble(array[i].substring(array[i].length() - 3)); если вы уверены, что класс всегда находится в форме x.xx в конце каждой строки.

Также подумайте о создании класса, который будет содержать всю информацию об учениках в отдельных полях, например:

public class Student{
public String name;
public String surname;
public int age;
public double grade;
}

Конечно, это всего лишь пример, вы можете скрыть реализацию и предоставить методы, которые вы хотите. Затем вы можете создать любую коллекцию объектов Student, поэтому получить заданное значение любого поля для любого ученика было бы легко.

ответил(а) 2014-01-08T05:03:00+04:00 5 лет, 11 месяцев назад
31

Разделите строку запятой, затем получите последний элемент результирующего массива

String[] splitArr = line.split(",");
String lastNumber = splitArr[splitArr.length - 1];

Но лучшим решением было бы иметь класс Студента, как предложено в комментариях

ответил(а) 2014-01-08T05:03:00+04:00 5 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема