Разделение строки пар чисел, а затем разделение каждой из них на java - PullRequest
0 голосов
/ 19 июня 2020

скажем, у меня есть следующая строка:

ball_velocities:45,500 46,500 47,500

Я бы хотел:

  • разделить пары друг от друга
  • разделить пару сам и числа внутри него друг от друга используют оба этих числа в функции, которая у меня уже есть
   String[] numbers = data.split("\\\\s+");
   if (numbers.length > 0) {
            List<Velocity> velocities = new ArrayList<>();
         for (String number : numbers) {
             try {
                 int firstNum = Integer.parseInt(number);
                      int secondNum = Integer.parseInt(number);
                velocities.add(Velocity.pair(firstNum,secondNum));

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

Я думаю, что это довольно просто, все, что мне нужно сделать, это data.split пробелами, так как я уже разделил данные снова запятыми, а потом я не знаю, как объедините эти 2 числа в одну функцию.

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

Velocity.pair(45,500)
Velocity.pair(46,500)
Velocity.pair(47,500)

Спасибо.

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Предполагая, что класс Velocity выглядит так:

class Velocity {
    private int firstNumber;
    private int secondNumber;

    public Velocity(int firstNumber, int secondNumber) {
        super();
        this.firstNumber = firstNumber;
        this.secondNumber = secondNumber;
    }

    public int getFirstNumber() {
        return firstNumber;
    }

    public void setFirstNumber(int firstNumber) {
        this.firstNumber = firstNumber;
    }

    public int getSecondNumber() {
        return secondNumber;
    }

    public void setSecondNumber(int secondNumber) {
        this.secondNumber = secondNumber;
    }

    public String toString() {
        return "[" + firstNumber + ", " + secondNumber + "]";
    }
}

, вам в основном придется go шаг за шагом:

  1. удалить вводный тег ball_velocities: из String, который вы хотите разделить,
  2. split результат произвольным количеством пробелов, затем
  3. split каждый результат этого запятой,
  4. проанализировать результаты, чтобы int s
  5. создать экземпляр Velocity с результатами анализа и, наконец,
  6. добавить каждый экземпляр Velocity к List<Velocity>

, что можно сделать, например, следующим образом:

public static void main(String[] args) throws ParseException {
    String data = "ball_velocities:45,500 46,500 47,500";

    List<Velocity> velocities = new ArrayList<>();
    // remove the intro tag and then split by whitespace(s)
    String[] numberPairs = data.replace("ball_velocities:", "").split("\\s+");

    // handle each result (which still consists of two numbers separated by a comma
    for (String numberPair : numberPairs) {
        // that means, split again, this time by comma
        String[] numbers = numberPair.split(",");
        // parse the results to ints
        int firstNum = Integer.parseInt(numbers[0]);
        int secondNum = Integer.parseInt(numbers[1]);
        // instantiate a new Velocity with the results and add it to the list
        velocities.add(new Velocity(firstNum, secondNum));
    }

    // print the list using the `toString()` method of Velocity
    velocities.forEach(System.out::println);
}

В этом примере будет напечатано

[45, 500]
[46, 500]
[47, 500]
0 голосов
/ 19 июня 2020

Сначала давайте получим входные данные в массив String:

String[] inputs = data.split(":")[1].split(" ");

По сути, мы сначала получаем правую часть двоеточия, а split - в массив String элементов, которые представляют собой входные данные, имеющие такие значения, как «45,500». Создадим массив Velocity и заполним его элементами:

Velocity[] velocities new Velocity[inputs.length];

for (int index = 0; index < inputs.length; index++) {
    String parts = inputs[index].split(",");
    velocities[index] = new Velocity(parts[0], parts[1]);
}
0 голосов
/ 19 июня 2020

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

@Getter
@Setter
@AllArgsConstructor
@ToString
public class Velocity {
    int id1;
    int id2;

    static Velocity pair(int i1, int i2) {
        return new Velocity(i1, i2);
    }
}
// -------- testing
String input = "ball_velocities:45,500 46,500 47,500";
String velo = input.replaceAll("ball_velocities\\s*\\:\\s*", ""); //remove prefix containing optional whitespaces

// String velo = "45,500 46,500 47,500";

Arrays.stream(velo.split("\\s+"))
      .map(s -> s.split("\\,"))
      .map(a -> Velocity.pair(Integer.parseInt(a[0]), Integer.parseInt(a[1])))
      .collect(Collectors.toList()) // list of velocity is available here
      .forEach(System.out::println);

output:

Velocity(id1=45, id2=500)
Velocity(id1=46, id2=500)
Velocity(id1=47, id2=500)
...