8

我需要提取在 a 中找到的第一个整数,java.lang.String并且不确定是尝试使用substring方法还是正则表达式方法:

// Want to extract the 510 into an int.
String extract = "PowerFactor510";

// Either:
int num = Integer.valueof(extract.substring(???));

// Or a regex solution, something like:
String regex = "\\d+";
Matcher matcher = new Matcher(regex);
int num = matcher.find(extract);

所以我问:

  • 哪种类型的解决方案在这里更合适,为什么?和
  • 如果子字符串方法更合适,我可以用什么来表示数字的开头?
  • 否则,如果正则表达式是合适的解决方案,我应该使用什么正则表达式/模式/匹配器/方法来提取数字?

注意:字符串总是以单词开头,PowerFactor后跟一个非负整数。提前致谢!

4

2 回答 2

9

该字符串将始终以单词“PowerFactor”开头,后跟一个非负整数

这意味着您确切地知道您将在哪个索引处找到该数字,我会说您最好直接使用子字符串,至少考虑到它的性能会比搜索和匹配工作快得多。

extract.substring("PowerFactor".length());

我找不到任何直接比较,但您可以阅读以下两个选项中的每一个:

于 2013-03-25T13:26:46.380 回答
1

有点好奇并尝试了以下

String extract = "PowerFactor510";
long l = System.currentTimeMillis();
System.out.println(extract.replaceAll("\\D", ""));
System.out.println(System.currentTimeMillis() - l);

System.out.println();

l = System.currentTimeMillis();
System.out.println(extract.substring("PowerFactor".length()));
System.out.println(System.currentTimeMillis() - l);

结果发现第二次测试要快得多,因此substring获胜。

于 2013-03-25T13:44:25.507 回答