我想获得此字符串的4个部分
String string = "10 trillion 896 billion 45 million 56873";
我需要的4个部分是“ 10万亿”,“ 896亿”,“ 4500万”和“ 56873”。
我所做的是删除所有空格,然后对其进行子串处理,但是我对索引感到困惑。 我看到了很多问题,但无法理解我的问题。
Sorry I don't have any code
我不能跑步,因为我不知道那是对的。
答案 0 :(得分:6)
这是一种轻松获取解决方案的方法。
String filename = "10 trillion 896 billion 45 million 56873";
String regex = " [0-9]";
String[] parts = filename.split(regex);
String part1 = parts[0]; // 10 trillion
String part2 = parts[1]; // 896 billion
String part3 = parts[2]; // 45 million
String part4 = parts[3]; // 56873
您也可以使用foreach循环获取值。
for(String str: parts){
Log.i(TAG, "onCreate: parts : "+str);
}
答案 1 :(得分:5)
您可以使用此正则表达式:
\d+(?: (?:tri|bi|mi)llion)?
它首先匹配一串数字\d+
,然后可选地(?:...)?
,我们匹配兆兆,十亿或百万(?:tri|bi|mi)llion
。
要使用此正则表达式,
Matcher m = Pattern.compile("\\d+(?: (?:tri|bi|mi)llion)?").matcher(string);
while (m.find()) {
System.out.println(m.group());
}
答案 2 :(得分:2)
下面的代码将起作用。查看评论以获取更多说明。
String input = "10 trillion 896 billion 45 million 56873";
String pattern = "\\s\\d"; // this will match space and number thus will give you start of each number.
ArrayList<Integer> inds = new ArrayList<Integer>();
ArrayList<String> strs = new ArrayList<String>();
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
while (m.find()) {
inds.add(m.start()); //start will return starting index.
}
//iterate over start indexes and each entry in inds array list will be the end index of substring.
//start index will be 0 and for subsequent iterations it will be end index + 1th position.
int indx = 0;
for(int i=0; i <= inds.size(); i++) {
if(i < inds.size()) {
strs.add(input.substring(indx, inds.get(i)));
indx = inds.get(i)+1;
} else {
strs.add(input.substring(indx, input.length()));
}
}
for(int i =0; i < strs.size(); i++) {
System.out.println(strs.get(i));
}
答案 3 :(得分:1)
正则表达式就是答案
import java.util.regex.Matcher;
import java.util.regex.Pattern;
final String regex = "(\\d+\\s+\\w+)|\\d+";
final String string = "10 trillion 896 billion 45 million 56873";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
它将打印
完全匹配:10万亿
第1组:10万亿
完全匹配:8960亿
第1组:8960亿
全场比赛:4500万
第1组:4,500万
完全匹配:56873
第1组:空
答案 4 :(得分:0)
您可以使用以下正则表达式:
String string = "10 trillion 896 billion 45 million 56873";
String[] array = string.split("(?<!\\G\\w+)\\s");
本质上,我们在每个第二个空间而不是每个空间进行分割。
答案 5 :(得分:0)
答案 6 :(得分:0)
尝试以下代码。
public static void main(String args []){ String str =“ 10万亿8960亿4500万56873”;
String[] strlist = str.split(" ");
for (int i = 0; i < strlist.length; i++) {
String data=textNumber(strlist[i], (i+1<strlist.length?strlist[i + 1]:""));
if (data != null) {
System.out.println(data);
i++;
}
}
}
public static String textNumber(String str1,String str2){
if(str1.matches("[0-9]+")){
if(str2.matches("[a-zA-Z]+")) {
return str1 + " " + str2;
}
return str1;
}
return null;
}