从输入字符串获取标记的最简单方法是什么?
给定一个字符串从输入字符串获取标记的最简单方法是什么?
abc=1&b=2&fa=_
我需要拆分它获得令牌的数组:
["abc", "=", "1", "&", "b", "=", "2", "&", "fa", "=" , "_"]
我的代码:
public String[] getTokens(String input) {
List<String> list = new ArrayList<>();
String[] splitted = input.split("&");
for (int k = 0, splittedLength = splitted.length; k < splittedLength; k++) {
String part = splitted[k];
String[] kv = part.split("=");
for (int i = 0, kvLength = kv.length; i < kvLength; i++) {
String elem = kv[i];
list.add(elem);
if (i < kvLength - 1) {
list.add("=");
}
}
if (k < splittedLength - 1){
list.add("&");
}
}
return list.toArray(new String[list.size()]);
}
我还需要在我的钥匙审理案件不能有一个值(=),在这种情况下,我应该设置一个默认值,以我的钥匙 - 一个空字符串(a=""
)。
我该怎么做?
你是对的,首先与“&”分开,然后用“=”分开,当第二个分割在索引1处没有项目时,您知道没有任何值,您可以将其设置为emptyString。只需调试一个和另一个案例,你会找到正确的解决方案。
这是您要分析,通常最简单的方法是绝对不会把它写自己,而是寻求执行这种简单的任务库的查询字符串。所以,我可以建议https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/client/utils/URLEncodedUtils.html#parse(java.lang.String,%20java.nio.charset.Charset)
为什么不直接使用java.io.StreamTokenizer中:
public static String[] getTokens(String input) {
try {
ArrayList<String> result = new ArrayList<>();
StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(input));
while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
switch (tokenizer.ttype) {
case StreamTokenizer.TT_WORD:
result.add(tokenizer.sval);
break;
case StreamTokenizer.TT_NUMBER:
result.add(String.valueOf(tokenizer.nval));
break;
default:
result.add(String.valueOf((char) tokenizer.ttype));
}
}
return result.toArray(new String[result.size()]);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
输出为您的例子中,返回值的Arrays.toString():
[abc, =, 1.0, &, b, =, 2.0, &, fa, =, _]
关于第二个问题(=
后的默认值):为了简单起见,我后处理中的第二循环中的令牌阵列(结果),并检查是否=
之后紧接着&
或在端部,并且在这种情况下,插入件=
令牌后的空字符串。
我认为你的解决方案不起作用。如果一个密钥是'k1'会怎么样?然后标记器将它分成两个元素('k'和'1'),这是错误的。 – user3633595
那么这种情况下,是不是你的问题的一部分... ...为什么你认为StreamTokenizer极将k和1之间的分裂?来自javadoc:“一个词汇标记由一个词组成,后面跟零个或多个单词组成或数字组成。” –
这取决于你的令牌的定义。 – Raedwald
见http://stackoverflow.com/questions/11733500/getting-url-parameter-in-java-and-extract-a-specific-text-from-that-url从URL查询字符串得到实例的地图。 –