在Java中用括号分割字符串

时间:2016-05-03 13:09:11

标签: java regex

现在,如果我有这样的字符串:

String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";

如何提取六个数字1374 48.4 32 100 290 43.11374 48.4% 32 100% 290 43.1%?可以用正则表达式完成吗?

4 个答案:

答案 0 :(得分:2)

您可以搜索标识浮点数的正则表达式:([+-]?(\d+\.)?\d+)

String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";

Pattern p = Pattern.compile("([+-]?(\\d+\\.)?\\d+)");
Matcher m = p.matcher(start);
while (m.find()) {
    System.out.println(m.group(1));
}

或使用正则表达式,同时确保括号位于:

Pattern p = Pattern.compile("\\(([+-]?(\\d+\\.)?\\d+)\\%?\\)");

答案 1 :(得分:0)

让我们在没有正则表达式的情况下做到这一点!

int i = 0;
while (i < start.length()) {
  while (i < start.length()) {
    char ch = start.charAt(i);
    // Maybe add other characters, e.g. %, if desired.
    if (Character.isDigit(ch) || ch == '.') {  
      break;
    }
    ++i;
  }
  int startOfBlock = i;
  while (i < start.length()) {
    char ch = start.charAt(i);
    if (!Character.isDigit(ch) && ch != '.') {
      break;
    }
    ++i;
  }
  if (i > startOfBlock) {
    System.out.println(start.substring(startOfBlock, i));
  }
}

答案 2 :(得分:0)

或者您可以尝试以下正则表达式[\d\.%]+它会给出包含以下项目的字符串组合
\d(数字)
\.点和
%诉讼签到一次或多次
点击此处查看live demo

答案 3 :(得分:0)

    String start = "(1374)(48.4%)(32)(100%)(290)(43.1%)";
    for(String splitString : start.split("[()]")) {
        System.out.print(splitString + " ");
    }