Как разделить строку плюс-минус в java?

Вход :

String arr[] = new String[4];

приб[0] = +2501 +2502 +2503 +2504

обр[1] = -2501 -2504 +2505 +2506 +2507 +2509

приб [2] = +2501 +2511 -2502 -2505

приб [3] = +2513 -2507 -2503 -2511 -2509

Выход :

Я хочу разделить строку как:

Положительный:

приб1[0] = +2501 +2502 +2503 +2504

приб1[1] = +2505 +2506 +2507 +2509

приб1[2] = +2501 +2511

приб1[3] = +2513

Отрицательный:

обрр2[0] = -2501 -2504

обрр2[1] = -2502 -2505

приб2[2] = -2507 -2503 -2511 -2509

int nostrt = -1, m = 0;
StringBuilder str4 = new StringBuilder();
for(int i = 0;i < strbullist.length(); i++)
{    
    char c = strbullist.charAt(i);

    if (nostrt == -1)
    {
        m = i;
        nostrt = 1; 
    }
    if (c=='-')
    {
        
        str4.append(strbullist.substring(m, i));
        nostrt = -1;
        System.out.println(str4);
    }    
}

ты уже осознал "раскол", теперь подумай "за счет чего". Я предполагаю, что строка такая "-2501 -2504 +2505 +2506 +2507 +2509", так что это "-2501 -2504 +2505 +2506 +2507 +2509".split(. . . ) ?

fantaghirocco 22.12.2020 10:24

Вам нужны два регулярных выражения, одно для соответствия отрицательным числам, другое для соответствия положительным числам. s.replaceAll("\\+\\d*", "") Этому выражению соответствуют все наборы только цифр со знаком «+» впереди. Замените «+» на «-», чтобы соответствовать отрицательным числам.

NomadMaker 22.12.2020 15:33
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
794
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Попробуйте эту логику и измените в соответствии с вашими потребностями.

импортировать java.util.Scanner; открытый класс p19 {

 public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);
  System.out.println("Enter the size of the array:");
     int size;
     size=sc.nextInt();
     int arr[ ]=new int[size];
  int i,j=0;
  System.out.println("Enter the Element of the array:");
      while(j<size)
     {
         arr[j]=sc.nextInt();
         j++;
     }
      System.out.println("Positive numbers are:");
      for(i=0;i<size;i++)
      {
          if (arr[i]>0)
          {
           System.out.print(arr[i]+" ");
          }
      }

      System.out.println("\nNegative numbers are:");
      for(i=0;i<size;i++){
          if (arr[i]<0)
          {
           System.out.print(arr[i]+" ");
          }
      }
     sc.close();
     }}

я хочу просто отделить его. Это строка, а не целое число.

shs 22.12.2020 10:33

ул = "2234 -8765 +665"; int[] splited = Integer.parseInt(str.split("\\s+"));

Gurucharan Gupta 22.12.2020 10:42
Ответ принят как подходящий

Вы можете разделить строку на один или несколько пробельных символов (например, \s+) и перебрать полученный массив, чтобы определить, начинается ли элемент с положительного или отрицательного символа.

Демо:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
        List<String> positiveNums = new ArrayList<>();
        List<String> negativeNums = new ArrayList<>();
        String[] arr = str.split("\\s+");

        for (String s : arr) {
            if (s.startsWith("+")) {
                positiveNums.add(s);
            } else if (s.startsWith("-")) {
                negativeNums.add(s);
            }
        }

        System.out.println("Positive numbers: " + positiveNums);
        System.out.println("Negative numbers: " + negativeNums);

        // If you want to store the output into string variables
        String positiveValues = positiveNums.toString();
        String negativeValues = negativeNums.toString();
        System.out.println("Positive numbers: " + positiveValues);
        System.out.println("Negative numbers: " + negativeValues);
    }
}

Выход:

Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]
Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]

Кроме того, вы также можете использовать регулярное выражение , \+\d+|\-\d+, что означает одну или несколько цифр, за которыми следует символ плюса (например, \+\d+), или (например, |) одну или несколько цифр, за которыми следует символ минуса (например, \-\d+).

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
        Matcher matcher = Pattern.compile("\\+\\d+|\\-\\d+").matcher(str);
        List<String> positiveNums = new ArrayList<>();
        List<String> negativeNums = new ArrayList<>();

        while (matcher.find()) {
            String s = matcher.group();
            if (s.startsWith("+")) {
                positiveNums.add(s);
            } else if (s.startsWith("-")) {
                negativeNums.add(s);
            }
        }

        System.out.println("Positive numbers: " + positiveNums);
        System.out.println("Negative numbers: " + negativeNums);
    }
}

Выход:

Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]

Если вы хотите использовать StringBuilder вместо List:

public class Main {
    public static void main(String[] args) {
        String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
        StringBuilder positiveNums = new StringBuilder();
        StringBuilder negativeNums = new StringBuilder();
        String[] arr = str.split("\\s+");

        for (String s : arr) {
            if (s.startsWith("+")) {
                positiveNums.append(s + " ");
            } else if (s.startsWith("-")) {
                negativeNums.append(s + " ");
            }
        }

        String positiveValues = positiveNums.toString().trim();
        String negativeValues = negativeNums.toString().trim();
        System.out.println("Positive numbers: " + positiveValues);
        System.out.println("Negative numbers: " + negativeValues);
    }
}

Выход:

Positive numbers: +2501 +2502 +2503 +2504 +2505 +2506 +2507 +2509 +2501 +2511 +2513
Negative numbers: -2501 -2504 -2502 -2505 -2507 -2503 -2511 -2509

Используя String#matches:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String str = "+2501 +2502 +2503 +2504 -2501 -2504 +2505 +2506 +2507 +2509 +2501 +2511 -2502 -2505 +2513 -2507 -2503 -2511 -2509";
        List<String> positiveNums = new ArrayList<>();
        List<String> negativeNums = new ArrayList<>();
        String[] arr = str.split("\\s+");

        for (String s : arr) {
            if (s.matches("\\+\\d+")) {
                positiveNums.add(s);
            } else if (s.matches("\\-\\d+")) {
                negativeNums.add(s);
            }
        }

        System.out.println("Positive numbers: " + positiveNums);
        System.out.println("Negative numbers: " + negativeNums);
    }
}

Выход:

Positive numbers: [+2501, +2502, +2503, +2504, +2505, +2506, +2507, +2509, +2501, +2511, +2513]
Negative numbers: [-2501, -2504, -2502, -2505, -2507, -2503, -2511, -2509]

Обновление (на основе обновленного вопроса):

Если строки в вашем вопросе являются элементами String[], вам нужен дополнительный цикл для повторения этого String[]. Остальные вещи останутся прежними.

public class Main {
    public static void main(String... args) {
        String[] strArr = { "+2501 +2502 +2503 +2504", "-2501 -2504 +2505 +2506 +2507 +2509", "+2501 +2511 -2502 -2505",
                "+2513 -2507 -2503 -2511 -2509" };
        StringBuilder positiveNums = new StringBuilder();
        StringBuilder negativeNums = new StringBuilder();

        for (String str : strArr) {
            String[] arr = str.split("\\s+");
            for (String s : arr) {
                if (s.startsWith("+")) {
                    positiveNums.append(s + " ");
                } else if (s.startsWith("-")) {
                    negativeNums.append(s + " ");
                }
            }
        }

        String positiveValues = positiveNums.toString().trim();
        String negativeValues = negativeNums.toString().trim();
        System.out.println("Positive numbers: " + positiveValues);
        System.out.println("Negative numbers: " + negativeValues);
    }
}

Выход:

Positive numbers: +2501 +2502 +2503 +2504 +2505 +2506 +2507 +2509 +2501 +2511 +2513
Negative numbers: -2501 -2504 -2502 -2505 -2507 -2503 -2511 -2509

Спасибо, сэр.

shs 22.12.2020 11:27

Добро пожаловать.

Arvind Kumar Avinash 22.12.2020 11:36

если есть массив строк и вы хотите сопоставить шаблон, то как это будет работать?

shs 22.12.2020 14:47

Я пытался, но он берет только последнее совпадение строки

shs 22.12.2020 14:59

@shs - Не беспокойтесь ... Я также опубликовал решение (последнее в моем ответе) для этого требования.

Arvind Kumar Avinash 22.12.2020 15:04

У вас есть ссылка?

shs 22.12.2020 15:08

@shs - Ссылка для чего?

Arvind Kumar Avinash 22.12.2020 15:10

Соответствие шаблону массива строк

shs 22.12.2020 15:12

@shs - не существует единого API для сопоставления элементов массива ... есть способы, например. Я разместил один (последний в моем ответе)... есть много других способов, например. с помощью Stream API, но вы должны повторять массив в каждом случае. Не стесняйтесь комментировать в случае каких-либо дальнейших сомнений.

Arvind Kumar Avinash 22.12.2020 15:21

Я отредактировал вопрос, не могли бы вы дать мне предложение по этому поводу.

shs 23.12.2020 10:37

@shs - я опубликовал обновление (последнее решение в моем ответе), чтобы выполнить это требование. Не стесняйтесь комментировать в случае каких-либо дальнейших сомнений.

Arvind Kumar Avinash 23.12.2020 10:44

Если вы хотите, чтобы числа хранились в строке, попробуйте это

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter size : ");
        int size = sc.nextInt();
        
        String [] numbers = new String[size];
        String positive = "", negative = "";
        
        System.out.print("Enter number with signs (-) or (+) : ");
        for(int i = 0; i < size; i++){
            numbers[i] = sc.next();
        }
        
        for(int i =0; i < size; i++){
            if (numbers[i].contains("-")){
                negative += numbers[i] + " ";
            }else if (numbers[i].contains("+")){
                positive += numbers[i] + " ";
            }
        }
        
        System.out.println("Negatives : " + negative);
        System.out.println("Positives : " + positive);

Другие вопросы по теме