Я все еще предпочитаю решение регулярных выражений (и проголосовал соответственно), но Camickr действительно подчеркивает, что регулярное выражение немного неясно, особенно для детей сегодня, которые не использовали Unix (когда это была мужская операционная система с толькоИнтерфейс командной строки - Booyah !!).Итак, вот решение высокого уровня, которое я предлагаю, не потому, что я думаю, что оно лучше, а потому, что оно служит примером того, как использовать некоторые изящные функции Гуавы:
package com.stevej;
import com.google.common.base.CharMatcher;
import com.google.common.base.Splitter;
import com.google.common.collect.Iterables;
public class StackOverflowMain {
public static void main(String[] args) {
Splitter extractParams = Splitter.on("rgb").omitEmptyStrings().trimResults();
Splitter splitParams =
Splitter.on(CharMatcher.anyOf("(),").or(CharMatcher.WHITESPACE)).omitEmptyStrings()
.trimResults();
final String test1 = "rgb(11,44,88)";
System.out.println("test1");
for (String param : splitParams.split(Iterables.getOnlyElement(extractParams.split(test1)))) {
System.out.println("param: [" + param + "]");
}
final String test2 = "rgb ( 111, 444 , 888 )";
System.out.println("test2");
for (String param : splitParams.split(Iterables.getOnlyElement(extractParams.split(test2)))) {
System.out.println("param: [" + param + "]");
}
}
}
Вывод:
test1
параметр: [11]
параметр: [44]
параметр: [88]
test2
параметр: [111]
параметр: [444]
param: [888]
Это регулярное выражение без регулярного выражения.
Это оставлено читателю в качестве упражнения дляadd проверяет, что (a) «rgb» появляется в начале строки, (b) скобки сбалансированы и правильно расположены, и (c) возвращается правильное количество правильно отформатированных целых чисел rgb.