Java: вычислять сумму непрерывно печатаемых чисел из InputStreamReader каждые n секунд?

#java #string #inputstream #bufferedreader

#java #строка #inputstream #bufferedreader

Вопрос:

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

Прямо сейчас я печатаю результат на консоль с помощью substring: System.out.println(inputStr.substring(inputStr.lastIndexOf(" ") 1)); , поскольку он будет печатать последние цифры вывода, которые мне нужны.

При непрерывном выводе, возможно, с 1 печатью в секунду, как мне написать Java-код для суммирования всех напечатанных чисел каждые N секунд?(скажем, 20 секунд для хорошей оценки)?

Вот исходный код до сих пор:

 import java.io.InputStreamReader;
import java.io.BufferedReader;

public class fooShell {

    public static void main(String[] args) {

        InputStreamReader isReader = new InputStreamReader(System.in);
        BufferedReader bufReader = new BufferedReader(isReader);
        while(true){
            try {
                String inputStr = bufReader.readLine();
                if(inputStr == null) {
                    break;
                }
                    System.out.println(inputStr.substring(inputStr.lastIndexOf(" ") 1));     
            }
            catch (Exception e) {
                System.err.println("Error " e);
            }
        }
   }

}
  

Ответ №1:

Сохраняйте постоянно обновляемую сумму как переменную класса и обновляйте ее каждый раз при опросе InputStreamReader.

 import java.io.BufferedReader;
import java.io.InputStreamReader;

public class FooShell
{
  int runningTotal;

  FooShell()
  {
    runningTotal = 0;
  }

  public static void main(String[] args)
  {

    FooShell fooShell = new FooShell();
    InputStreamReader isReader = new InputStreamReader(System.in);
    BufferedReader bufReader = new BufferedReader(isReader);
    while (true)
    {
      try
      {
        String inputStr = bufReader.readLine();
        if (inputStr == null)
        {
          break;
        }
        int currentNumber = Integer
            .parseInt(inputStr.substring(inputStr.lastIndexOf(" ")   1));
        fooShell.runningTotal  = currentNumber;
        System.out.println(currentNumber);
      }
      catch (Exception e)
      {
        System.err.println("Error "   e);
      }
    }
  }
}
  

Комментарии:

1. У вас было бы это внутри main? Кроме того, как бы вы заставили его печатать сумму каждые N секунд? Также я не вижу, чтобы вы когда-либо использовали значение «MyClass»?

2. Без понятия, как выглядит ваш код, очень сложно дать вам больше указаний. Где бы ни находился ваш код в данный момент, который выводит результат на консоль, просто необходимо обновить переменную sum. MyClass — это общее имя класса, а не значение, которое будет использоваться.