如何动态提取字符串的某些部分

时间:2019-02-22 09:51:27

标签: java string

似乎我的问题很简单,很可能重复了,但我找不到答案。

这是我的字符串:

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,然后对身高和体重进行同样的操作。

5 个答案:

答案 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);
         }
  1. 。*一个或多个字符。
  2. age是静态字符串。
  3. \ s表示空格
  4. ()表示分组匹配
  5. \ d仅一位数,而+表示一位或多位数字,如果我写\ d +则意味着一位或多位数字//例如1,166,168,某些情况下您希望输入80.5 所以我加了。之后 。应该至少有一个或多个数字,所以我加了\ d +。
  6. |意味着或
  7. \ d +仅数字///例如80

答案 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;