import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class FieldSplitter {
private static Logger LOG = new Logger();
public static final void main(String[] args) {
String[] fields = new String[] { "name", "field", "grade" };
printFieldValues(fields,
"name ching chang field computer engineering grade 9.98");
printFieldValues(fields,
"ching chang field computer engineering grade 9.98");
printFieldValues(fields,
"name ching chang field computer engineering name johnny bravo grade 9.98");
}
public static Map<String, String> getFieldValues(String[] fields,
String input) {
Map<String, String> fieldValues = new HashMap<String, String>();
for (String field : fields) {
fieldValues.put(field, null);
}
String[] words = input.split("\\s");
LOG.debug("words:" + Arrays.toString(words));
String field = null;
int start = 0;
for (String word : words) {
if (fieldValues.containsKey(word)) {
int end = input.indexOf(word, start);
if (end < 0) {
throw new RuntimeException(String.format(
"Error: '%s' not found after position %s", word,
end));
}
if (field != null) {
fieldValues.put(field, input.substring(start, end));
}
field = word;
start = end + word.length();
}
}
if (field != null) {
fieldValues.put(field, input.substring(start, input.length()));
}
return fieldValues;
}
private static void printFieldValues(String[] fields, String input) {
for (Entry<String, String> field : getFieldValues(fields, input)
.entrySet()) {
LOG.debug(String.format("%s=%s", field.getKey(), field.getValue()));
}
}
private static class Logger {
void debug(String message) {
System.out.println(message);
}
}
}
输出:
words:[name, ching, chang, field, computer, engineering, grade, 9.98]
grade= 9.98
name= ching chang
field= computer engineering
words:[ching, chang, field, computer, engineering, grade, 9.98]
grade= 9.98
name=null
field= computer engineering
words:[name, ching, chang, field, computer, engineering, name, johnny, bravo, grade, 9.98]
grade= 9.98
name= johnny bravo
field= computer engineering
P.S. 我刚发现了一个微不足道但非常有用的技巧:在Eclipse中选择你的代码并按下TAB键进行缩进。然后将缩进的代码复制粘贴到Stackoverflow的编辑框中。这样,代码将立即正确地呈现出来。
split("name|field|grade")
- Nishant