【问题标题】:How do I split the plus minus number string in java? [closed]如何在java中拆分正负数字符串? [关闭]
【发布时间】:2021-04-01 00:04:37
【问题描述】:

输入:

字符串 arrr[] = 新字符串[4];

arrr[0] = +2501 +2502 +2503 +2504

arrr[1] = -2501 -2504 +2505 +2506 +2507 +2509

arrr[2] = +2501 +2511 -2502 -2505

arrr[3] = +2513 -2507 -2503 -2511 -2509

输出:

我想将字符串分隔为:

正面:

arrr1[0] = +2501 +2502 +2503 +2504

arrr1[1] = +2505 +2506 +2507 +2509

arrr1[2] = +2501 +2511

arrr1[3] = +2513

否定:

arrr2[0] = -2501 -2504

arrr2[1] = -2502 -2505

arrr2[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(. . . )
  • 你想要的是两个正则表达式,一个匹配负数,一个匹配正数。 s.replaceAll("\\+\\d*", "") 此表达式匹配所有前面带有“+”的唯一数字集。将“+”替换为“-”以匹配负数。

标签: java string split stringbuilder


【解决方案1】:

试试这个逻辑,根据你的需要改变。

导入 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();
     }}

【讨论】:

  • 我想把它分开。它是一个字符串而不是整数。
  • str = "2234 -8765 +665"; int[] split = Integer.parseInt(str.split("\\s+"));
【解决方案2】:

您可以将字符串拆分为一个或多个空白字符(即\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]

或者,您也可以使用regex\+\d+|\-\d+,这意味着one or more 数字后跟一个加号(即\+\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

【讨论】:

  • 谢谢先生,它woeked
  • 不客气。
  • 如果有字符串数组并想匹配模式,那么它将如何工作?
  • 我试过了,但它只取字符串的最后一个匹配器
  • @shs - 不用担心......我也已经发布了解决这个要求的解决方案(我的答案中的最后一个)。
【解决方案3】:

如果你想将数字存储在字符串中,试试这个

        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);

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多