用于从字符串中拆分负数和正数的Java正则表达式

用于从字符串中拆分负数和正数的Java正则表达式,java,regex,Java,Regex,这是我的程序,如果我的输入是这样的话,它就是工作: asd12jjh-23lm100k但是如果我有两个负数,一个接一个 asd123kk-23-51llk正则表达式不起作用。所以我需要帮助如何更改我的表达式,从带有-符号的字符串中获取所有数字,然后打印它们并计算所有元素的总和 import java.util.Scanner; public class Task9 { public static void main(String[] args) { // TODO Auto-genera

这是我的程序,如果我的输入是这样的话,它就是工作:
asd12jjh-23lm100k
但是如果我有两个负数,一个接一个
asd123kk-23-51llk
正则表达式不起作用。所以我需要帮助如何更改我的表达式,从带有
-
符号的字符串中获取所有数字,然后打印它们并计算所有元素的总和

import java.util.Scanner;
public class Task9 {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a string with digits,characters and sign");
    String sentecen = sc.nextLine();
    int sum = 0;
    String []splitedNumbers = sentecen.split("[^0-9-]+");
    for (int i = 1; i < splitedNumbers.length; i++) {
    sum+=Integer.parseInt(splitedNumbers[i]);   
    }
    for(String check:splitedNumbers){
        System.out.println(check);
    }
    System.out.println(sum);
}

}
import java.util.Scanner;
公开课任务9{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪sc=新的扫描仪(System.in);
System.out.println(“输入带数字、字符和符号的字符串”);
字符串sentecen=sc.nextLine();
整数和=0;
字符串[]splitedNumbers=sentecen.split([^0-9-]+”);
对于(int i=1;i
您可以在以下位置测试正则表达式:

您可以使用regex
“[0-9]+|[-][0-9]+”
检索所有数字,然后求和


您可以找到正则表达式模式

您可以在以下位置测试正则表达式:

您可以使用regex
“[0-9]+|[-][0-9]+”
检索所有数字,然后求和

您可以找到正则表达式模式

是捕获所有连续(相邻)数字或破折号字符的。这就是为什么
-123-124
被视为一个单独的单元,这是您不想要的

在这种情况下,正数表示

字符串中第一个字符或紧跟在非数字/非破折号字符后面的第一个字符的数字

此正则表达式将提取所有正数:

(?:^|(?<![-0-9]))([0-9]+)
(-[0-9]+)

上面写着“找到一个破折号,后跟一个或多个数字”


如果您不必在单个正则表达式中进行解析,那么就不要这样做。为什么要让它变得比需要的更复杂?分两次分析字符串。首先提取正数,其次提取负数,然后按照您的意愿进行操作


请考虑书签,以供将来参考。 是捕获所有连续(相邻)数字或破折号字符的。这就是为什么
-123-124
被视为一个单独的单元,这是您不想要的

在这种情况下,正数表示

字符串中第一个字符或紧跟在非数字/非破折号字符后面的第一个字符的数字

此正则表达式将提取所有正数:

(?:^|(?<![-0-9]))([0-9]+)
(-[0-9]+)

上面写着“找到一个破折号,后跟一个或多个数字”


如果您不必在单个正则表达式中进行解析,那么就不要这样做。为什么要让它变得比需要的更复杂?分两次分析字符串。首先提取正数,其次提取负数,然后按照您的意愿进行操作



如果你的答案对你有帮助,请考虑一下投票和接受它,点击绿色的大选中。祝你好运,欢迎来到Stack Overflow@RumenGergushki:如果这个答案对你有帮助,请考虑点击并接受它,点击绿色的大选中。祝你好运,欢迎来到Stack Overflow!