Я не могу преобразовать строку в целое число (из файла CSV) -Ошибка для входной строки: "4" - PullRequest
0 голосов
/ 10 апреля 2020

В Android studio - Java

Я пошел разными путями, но мне не удалось превратить String в Int. У меня есть CSV-файл, и я читаю его значения. Но я не могу преобразовать столбец id в int.

private void getCSVData(){
        inputStream = getResources().openRawResource(R.raw.book);
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
        try {
            String csvLine;
            ArrayList<String> name = new ArrayList<String>();
            ArrayList<String> type = new ArrayList<String>();
            ArrayList<Integer> price = new ArrayList<Integer>();
            ArrayList<Integer> bookId = new ArrayList<String>();
            while ((csvLine = reader.readLine()) != null){
                String[] values = csvLine.split(",");
                bookId.add(Integer.parseInt(values[0].trim()));
                name.add(values[1]);
                type.add(values[2]);
                price.add(Integer.parseInt(values[3].trim()));
            }

            comparison(name, type, price, bookId);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
}

Я использую .getChars() и получаю десятичный код: 65279. Он не имеет эквивалентного кода Ascii. Я понял, что только первый персонаж из всех данных имел эту проблему. Последующие записи не имеют проблем

Образ консоли отладки

1 Ответ

0 голосов
/ 10 апреля 2020

Я думаю, что во входной строке есть двойные кавычки " или какой-либо другой подобный символ. Наверное, это и есть проблема.

values[0].trim().replace("\"", "")

=================== РЕДАКТИРОВАТЬ ============= =============

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

values[0].trim().replace("“", "");
values[0].trim().replace("”", "");

. Вы также можете сделать это более обобщенно, чтобы удалить все нечисловые c символы,

        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < values[0].length(); i++) {
            char c = values[0].charAt(i);
            if(c > 47 && c < 58){
                builder.append(c);
            }
        }

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

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...