在分隔的字符串中查找第n个字符串

时间:2010-11-16 13:02:22

标签: java android

有没有人知道如何在分隔符字符串中找到第n个字段(字符串),其中分隔符(分隔符)可以是单个字符或几个字符。

例如,

string = "one*two*three"

separator = "*"

用户定义函数的语法是FindNthField(string,separator,position)

所以位置3会返回three

使用的分隔符实际上是Chr(13)

这必须在Android上运行,因此效率很高。

任何建议都将不胜感激。

3 个答案:

答案 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);
        }
    }
}