【发布时间】:2018-03-05 19:32:24
【问题描述】:
我有一个如下所示的字符串坐标:“(1,2)-(5,7)”
如何将此字符串转换为数组:[1, 2, 5, 7]?
我还有其他两位数的字符串,例如:"(13,26)-(1,16)"
这需要变成 [13, 26, 1, 16]
任何帮助将不胜感激
【问题讨论】:
-
您为实现这一目标做了哪些努力??
我有一个如下所示的字符串坐标:“(1,2)-(5,7)”
如何将此字符串转换为数组:[1, 2, 5, 7]?
我还有其他两位数的字符串,例如:"(13,26)-(1,16)"
这需要变成 [13, 26, 1, 16]
任何帮助将不胜感激
【问题讨论】:
String s = "(1,2)-(45,87)";
String[] splitted = s.replaceFirst("\\D+", "").split("\\D+"); // Outputs: [1, 2, 45, 87]
\\D++ - 表示一个或多个非数字字符
s.replaceFirst("\\D+", "") - 这是为了避免在splitted 数组的第一个索引处存储空字符串(如果在输入字符串的第一个索引处存在“分隔”,则 String.split() 方法会处理字符串作为存储在结果数组中的第一个元素。使用该 replaceFirst() 方法,您可以消除输入字符串开头出现的所有非数字字符。
.split("\\D+") - 将上一个操作的结果拆分为一个或多个非数字字符。
注意:如果您只使用 String[] splitted = s.split("\\D+");(没有 replaceFirst() 部分,输出将如下所示:[, 1, 2, 45, 87],这不是您的意图。
【讨论】:
//你的字符串
String x = "(13,26)-(5,7)";
//进入字符串数组
String arr[] = x.replace("(", "").replace(")", "").replace("-", ",").split(",");
如果你不想要字符串数组而你想要字符串那么:
x.replace("(", "").replace(")", "").replace("-", ",");
如果需要,您可以附加“[”和“]”。
【讨论】:
你可以试试这样的:
String array = "(1,2)-(5,7)";
String[] items = arr.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-","").split(",");
int[] newArray = new int[items.length];
for (int i = 0; i < item.length; i++) {
newArray[i] = Integer.parseInt(items[i]);
}
【讨论】:
如果您一次只需要匹配 1 到 2 个数字,以下 sn-p 将为您解析出值:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class IntegerGetter {
public static void main(String[] args) {
String test = "(13,26)-(1,16)"; // Line with the values
Pattern p = Pattern.compile("[0-9]{1,2}"); // Create a regex pattern searching number values between 0 and 99
Matcher m = p.matcher(test);
List<Integer> values = new ArrayList<>();
while(m.find()) {
values.add(Integer.parseInt(m.group())); // Convert the String matches to integers
}
System.out.println("Values are: " + Arrays.toString(values.toArray()));
}
}
【讨论】: