Добавить пробел после каждого целого числа в файле с помощью java

Я пытаюсь написать код, который принимает файл в качестве входных данных и выводит файл с пробелами после каждого целого числа, если его нет.

Пример:

Input file contains: 3 0001 Output file should be: 3 0 0 0 1

Проблема в том, что 0001 определяется как 1, и я получаю вывод как

3 1

Ниже приведен первый код, который я пробовал

Scanner scanner = new Scanner(new File(inputPath));
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();
while (scanner.hasNextInt()) integerArrayList.add(scanner.nextInt());
System.out.println(integerArrayList.toString());
scanner.close();

Выход - [3, 1]

Пробовал читать как персонаж

FileInputStream fin = new FileInputStream(new File(inputPath));
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();
while (fin.available() > 0) integerArrayList.add(Integer.valueOf(fin.read()));
System.out.println(integerArrayList.toString());
fin.close();

Теперь выход - [51, 32, 48, 48, 48, 49]


person hello_world    schedule 11.04.2015    source источник
comment
Хотите опубликовать свой код?   -  person tonychow0929    schedule 11.04.2015
comment
Я очень расстроился и закрыл его без сохранения! :/   -  person hello_world    schedule 11.04.2015
comment
Так что напишите это снова, на этот раз тщательно обдумав то, что вы делаете. То, что вы ищете, - это не целые числа, это цифровые символы.   -  person RealSkeptic    schedule 11.04.2015
comment
только что добавил небольшой код, я читаю файл и ввожу целые числа в массив, есть ли способ обнаружить начальные нули?   -  person hello_world    schedule 11.04.2015
comment
Не храните список Integer. Для Integer все ведущие нули будут отброшены. Например, 000001, 0000000000001 и 1 будут обрабатываться как 1 (поскольку Integer на самом деле просто простое целое число). Вместо этого попробуйте использовать String (который на самом деле хранит последовательность char).   -  person tonychow0929    schedule 11.04.2015


Ответы (3)


Попробуйте этот код и внимательно прочитайте комментарий.

Scanner inp=new Scanner(new File(inputPath));
ArrayList<Integer> integerArrayList = new ArrayList<Integer>();
//looking for next string
while(inp.hasNext()){
   String my_string=inp.next();//taking the string
   for(int i=0;i<my_string.length();i++){//adding every character of string
    try {//if a integer found add to list
        integerArrayList.add(Integer.parseInt(String.valueOf(my_string.charAt(i))));
        } catch (Exception ex) {
          //exception occurs if an integer not found and do nothing 
        }
   }
}

//printing values and here you can use your code to write in another file but use a space(" ") after every integer to get your desired output
for(int i=0;i<integerArrayList.size();i++){
   System.out.print(integerArrayList.get(i)+" ");
}
person Md. Nasir Uddin Bhuiyan    schedule 11.04.2015

Помимо чтения и записи файлов, я попытался реализовать требуемую логику. Надеюсь, что это поможет вам!

Попробуй это:

public class SpaceLogic {
    public static void main(String[] args) {
      String chars = "3 0001";
      char[] charArray = chars.trim().replaceAll("\\s+", "").toCharArray();
      StringBuilder builder = new StringBuilder();
      for (char ch : charArray) {
        builder.append(ch).append(" ");
      }
      System.out.println(builder.toString());
    }
}
person Pankaj Dubey    schedule 11.04.2015

Самый простой способ - прочитать его в строку вместо целого числа. Если вы хотите убедиться, что это целое число, проверьте только, является ли строка целым числом:

String someString=readInputLine(); // Your input instructions
String[] someStringArray=someString.split("");

for(int i=0;i<someStringArray.length;i++) {
try {
   Integer intVal=new Integer(someStringArray[i]);
   yourwritefunction(intVal);
} catch(Exception exp) { System.out.println("Not an integer, skipping write"); }
}
person Norbert van Nobelen    schedule 11.04.2015