我正在编写一个程序来使用向量函数进行不同的计算,但是我现在拥有的程序界定了负数。我尝试过使用不同的分隔符,但似乎无法找到正确的分隔符。
有谁知道分割字符串时如何保留正数和负数?另外,有没有办法保留任何小数值?.45 将返回 45,.29 将返回 29
这是代码:
ArrayList<Integer> list = new ArrayList<Integer>();
String twoVectors = "a=<-1,2,-3> b=<4,-5,6>"; // vector and a and b
String[] tokens = twoVectors.split("\\D");
for (String s : tokens)
if (!s.equals(""))
list.add(Integer.parseInt(s));
System.out.println(Arrays.toString(list.toArray()));
Run Code Online (Sandbox Code Playgroud)
当我运行该程序时,我得到 [1, 2, 3, 4, 5, 6] 而不是 [-1, 2, -3, 4, -5, 6]。我所有的功能都工作得很好,但在使用负值时不起作用。
任何帮助,将不胜感激。
您可以使用
String[] tokens = twoVectors.split("[^\\d-]+");
Run Code Online (Sandbox Code Playgroud)
[^\\d-]+:匹配除数字之外的任何内容-
[] :匹配里面提到的所有内容[]
^ : 否定表示不匹配 ( \\d-)
\\d- : 数字0-9和-字符
String twoVectors = "a=<-1,2,-3> b=<4,-5,6>";
ArrayList<Integer> list = new ArrayList<Integer>();
String[] tokens = twoVectors.split("[^\\d-]");
for (String s : tokens)
if (!s.equals(""))
list.add(Integer.parseInt(s));
System.out.println(Arrays.toString(list.toArray()));
Run Code Online (Sandbox Code Playgroud)
输出 :
[-1, 2, -3, 4, -5, 6]
Run Code Online (Sandbox Code Playgroud)
或者
您可以使用Patternwithmatcher来查找所有所需的值,即带-?\\d+正则表达式的有符号或无符号数字
更新: 对于Double值,您可以使用[^\\d-.]+并确保使用Double而不是Integer与Double.parseDouble
并与Pattern和Matcher使用-?\\d*\\.?\\d+
| 归档时间: |
|
| 查看次数: |
3024 次 |
| 最近记录: |