使用Java 8,你可以這樣做:
String str = "There 0 are 1 some -2-34 -numbers 567 here 890 .";
int[] ints = Arrays.stream(str.replaceAll("-", " -").split("[^-\\d]+"))
.filter(s -> !s.matches("-?"))
.mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
如果沒有負數,你可以擺脫replaceAll
(並使用!s.isEmpty()
在filter
),因爲這只是爲了正確分割像2-34
(這也可以純粹與正則表達式處理,但它相當複雜)。
Arrays.stream
將我們的String[]
變成Stream<String>
。
filter
擺脫了前導和尾隨的空字符串以及不屬於數字的任何-
。
mapToInt(Integer::parseInt).toArray()
請撥打parseInt
在String
上給我們一個int[]
。
另外,爪哇9的Matcher.results方法,它應該允許這樣的事情:
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("There 0 are 1 some -2-34 -numbers 567 here 890 .");
int[] ints = m.results().map(MatchResults::group).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
目前的情況是,這些都不是在剛上循環的結果有較大改善與其他答案中顯示的Pattern
/Matcher
一樣,但如果您想跟隨更復雜的操作,並且使用流顯着簡化,它應該更簡單。
是數字用空格或其他字符包圍?數字如何格式化,是十六進制,八進制,二進制還是十進制? – 2010-03-02 22:38:43
我想這個問題很明顯:這是一個帶數字的英語句子。此外,我正在談論一個整數數組,所以我在尋找的是整數。 – 2010-03-02 22:56:57