有没有人知道如何在分隔符字符串中找到第n个字段(字符串),其中分隔符(分隔符)可以是单个字符或几个字符。
例如,
string = "one*two*three"
separator = "*"
用户定义函数的语法是FindNthField(string,separator,position)
所以位置3会返回three
使用的分隔符实际上是Chr(13)
。
这必须在Android上运行,因此效率很高。
任何建议都将不胜感激。
答案 0 :(得分:2)
或许这样的事情?
public String FindNthField(String string, String separator, int position) {
String[] splits = string.split(separator);
if (splits.length < position) {
return null;
}
return splits[position - 1];
}
显然,您的separator
必须是regex
字符串,而我没有null
项检查。
答案 1 :(得分:0)
String#split
是你的朋友:
private String findNthField(String input, int position) {
return findNthField(input, "\n", position);
}
private String findNthField(String input, String regExp, int lineNr) {
if (input == null || regExp == null || regExp.equals(""))
throw new IllegalArgumentException("your message");
String[] parts = input.split(regExp);
if (parts.length < lineNr)
return ""; // local convention
return parts[lineNr-1];
}
答案 2 :(得分:0)
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class SplitterTest {
@Test
public void testFindNthField() {
final Splitter splitter = new Splitter();
Assert.assertEquals("result", "three", splitter.findNthField("one*two*three", '*', 3));
}
private class Splitter {
public String findNthField(final String input, final char separator, final int position) {
final List<String> parts = new ArrayList<String>();
final char[] chars = new char[input.length()];
input.getChars(0, input.length(), chars, 0);
int wordStart = 0;
for (int idx = 0; idx < chars.length; idx++) {
if (chars[idx] == separator) {
parts.add((String) input.subSequence(wordStart, idx));
wordStart = idx + 1;
}
}
parts.add(input.substring(wordStart));
return parts.get(position - 1);
}
}
}