似乎我的问题很简单,很可能重复了,但我找不到答案。
这是我的字符串:
String s = "Bob age 30 height 190 and weight 80";
我需要将其转到不同的字段30、190和80。年龄可能是9,身高99和体重101,因此该方法应该灵活。
String age = 30;
String height = 190;
String weight = 80;
我如何提取它?
我需要在Telend Open Studio中执行此操作,并且无法初始化并将其放入数组,然后再将其放入字符串。我想在 age 字段中输入30,然后对身高和体重进行同样的操作。
答案 0 :(得分:1)
尝试一下:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
Pattern pattern = Pattern.compile("-?\\d+");
String s = "Bob age 30 height 190 and weight 80";
Matcher matcher = p.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group());
}
您可以将结果添加到列表中,而不必执行Sysout。
答案 1 :(得分:1)
String example="Bob age 30 height 190 and weight 80";
Pattern pattern = Pattern.compile(".*age\\s(\\d+\\.\\d+|\\d+).*height\\s(\\d+\\.\\d+|\\d+).*weight\\s(\\d+\\.\\d+|\\d+)");
Matcher matcher = pattern.matcher(example);
while(matcher.find()) {
String age = matcher.group(1);
String height = matcher.group(2);
String weight = matcher.group(3);
}
答案 2 :(得分:0)
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class Solution {
public static void main(String[] args) {
String test="Bob age 30 height 190 and weight 80";
String number = test.substring(test.lastIndexOf("age") + 3,test.lastIndexOf("age") + 6);
System.out.print(number);
number = test.substring(test.lastIndexOf("height") + 6,test.lastIndexOf("height") + 10);
System.out.print(number);
number = test.substring(test.lastIndexOf("weight") + 6,test.lastIndexOf("weight") + 9);
System.out.print(number);
Pattern p = Pattern.compile("-?\\d+");
test = "Bob age 30 height 190 and weight 80";
Matcher m = p.matcher(test);
System.out.println("\n");
while (m.find()) {
System.out.print(" "+m.group());
}
}
}
答案 3 :(得分:0)
可能有比字符串操作更好的方法。
但是,如果您确实想使用String操作,则可以使用一种方法,该方法搜索特定的关键字并获取字符串的位置(String indexOf(age)
方法),然后在此之后直接检索String关键字(仅在找到的位置添加一个关键字)(只有找到了该子字符串)(如果找不到该子字符串,它将不会尝试检索该数字)。
还应该将身高和体重变量更改为double
,并且当从String中提取值时,请使用Double.parseDouble(numToParse)。
答案 4 :(得分:0)
首先,您可以将所有字母单词替换为空格,然后按空格分隔,并使用一些硬代码获取列表并存储它。如下所示:
public static void main( String[] args )
{
String line = "Bob age 30 height 190 and weight 80";
String numbersLine = line.replaceAll("[^0-9]+", " ");
String[] strArray = numbersLine.split(" ");
List<String> list = new ArrayList<>();
int index = 0;
for (String string : strArray) {
if (!string.equals("")) {
if( index == 0){
list.add("String age = "+Integer.parseInt(string) + ";");
}
else if( index == 1){
list.add("String height = "+Integer.parseInt(string) + ";");
}else{
list.add("String weight = "+Integer.parseInt(string) + ";");
}
index++;
}
}
for( String str : list)
{
System.out.println( str );
}
}
输出
String age = 30;
String height = 190;
String weight = 80;