2015-06-03 3 views
-2

Я читаю из файла с помощью сканера, а текст содержит следующее.Как преобразовать String в String Array?

[8, 3, 8, 2, 3, 4, 4, 4, 5, 8]

Это было первоначально целочисленный массив, который я должен был преобразовать в строку, чтобы иметь возможность писать в файл. Теперь мне нужно иметь возможность прочитать файл обратно в java, но мне нужно иметь возможность добавлять отдельные числа вместе, поэтому мне нужно вернуть эту строку в массив. Любая помощь? Вот что у меня есть:

File f = new File("testfile.txt"); 
try{ 
    FileWriter fw = new FileWriter(f); 
    fw.write(Arrays.toString(array1)); 
    fw.close(); 
} catch(Exception ex){ 
    //Exception Ignored 
} 

Scanner file = new Scanner(f);  
System.out.println(file.nextLine()); 

Это печатает список чисел, но в строке. Мне нужно получить доступ к целым числам в массиве, чтобы их добавить. Это мой первый пост, дайте мне знать, если я что-то испортил.

+0

Split только что теперь -read line на основе «comma» и parseInt? – prabugp

ответ

4

Вы можете использовать String#substring снять квадратные скобки, String#split расколоть String в массив, String#trim удалить пробел и Integer#parseInt преобразовать String S в Int значения.

В Java 8 вы можете использовать поток API для этого:

int[] values = Arrays.stream(string.substring(1, string.length() - 1) 
        .split(",")) 
        .mapToInt(string -> Integer.parseInt(string.trim())) 
        .toArray(); 

Для суммирования, вы можете использовать метод IntStream#sum вместо преобразования его в массив в конце.

0
List<Integer> ints = new ArrayList<>(); 
String original = "[8, 3, 8, 2, 3, 4, 4, 4, 5, 8]"; 
String[] splitted = original.replaceAll("[\\[\\] ]", "").split(","); 
for(String s : splitted) { 
    ints.add(Integer.valueOf(s)); 
} 
+3

Пространства разума и квадратные скобки. – Egor

+0

Но понятие действительно. Для этого, downvote? – Stewart

+2

@ Стюарт, На самом деле это не было ничтожество, но ваш ответ неполный. Хотя концепция действительно, вы должны хотя бы описать недостатки своего решения или лучше дать полное решение. – Egor

2

Вам не нужно читать String обратно в Array, просто используйте Regex

public static void main(String[] args) throws Exception { 
    String data = "[8, 3, 8, 2, 3, 4, 41, 4, 5, 8]"; 
    // The "\\d+" gets the digits out of the String 
    Matcher matcher = Pattern.compile("\\d+").matcher(data); 

    int sum = 0; 
    while(matcher.find()) { 
     sum += Integer.parseInt(matcher.group()); 
    } 

    System.out.println(sum); 
} 

Результаты:

Смежные вопросы