我正在尝试使用带有正则表达式的java中的string.split从母字符串中取出特殊字符串。
string str = "name ching chang field computer engineering grade 9.98";
string[] splits = str.split("regex");
我想使用名称,字段和成绩作为分隔符。现在正则表达式应该是什么,以便我的字符串数组(拆分)中包含以下项目:
splits[0] = "ching chang"
splits[1] = "computer engineering"
splits[2] = "9.98"
答案 0 :(得分:10)
String str = "name ching chang field computer engineering grade 9.98";
String[] splits = str.split("name |field |grade ");
//test with
for(String s : splits)
System.out.println(s);
答案 1 :(得分:1)
String str = "name ching chang field computer engineering grade 9.98";
String[] splits = str.split("name|field|grade");
System.out.println(Arrays.asList(splits));
答案 2 :(得分:0)
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* Fieldsplitter with configurable fields
*/
public class FieldSplitter {
private static Logger LOG = new Logger();
/**
* Test method
*
* @param args
* not used
*/
public static final void main(String[] args) {
String[] fields = new String[] { "name", "field", "grade" };
// regular test case
printFieldValues(fields,
"name ching chang field computer engineering grade 9.98");
// missing field
printFieldValues(fields,
"ching chang field computer engineering grade 9.98");
// duplicate field
printFieldValues(fields,
"name ching chang field computer engineering name johnny bravo grade 9.98");
}
/**
* Gets the values of the fields from the input. If a field is not found the
* value is null. If a field occurs multiple times the last value is used.
*
* @param fields
* the known fields
* @param input
* the input containing consecutive fields and their values
* separated by whitespace
* @return a Map containing all known fields and their values
*/
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()));
}
}
/** A simple logger */
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编辑字段中。通过这种方式,代码将立即正确呈现。