gpt4 book ai didi

Java正则表达式从字符串中分割负数和正数

转载 作者:行者123 更新时间:2023-12-01 18:16:26 27 4
gpt4 key购买 nike

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

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

}

最佳答案

[^0-9-]+

character class捕获所有连续(彼此相邻)的数字或破折号字符。这就是为什么-123-124被视为一个整体,这是您不希望看到的。

在这种情况下,正数意味着

A digit that is either the first character in the string, or the first to immediately-follow a non-digit/non-dash character.

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

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

Regular expression visualization

Debuggex Demo

它表示数字之前的位置必须是 beginning of the string ( ^ ) ... or ( | )包含除破折号或数字 ( (?<![-0-9]) ) 之外的任何字符。后者是 negative look-behind .

在此上下文中,负数表示

A digit that does have a dash before it, and is therefore not the first character in the string.

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

(-[0-9]+)

Regular expression visualization

Debuggex Demo

它说“找到一个破折号,后面紧跟一个或多个数字”。

<小时/>

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

<小时/>

请考虑为 Stack Overflow Regular Expressions FAQ 添加书签以供将来引用。

关于Java正则表达式从字符串中分割负数和正数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29235945/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com