所以该方法有两个参数,第一个是你要拆分的字符串,第二个是分隔符(在哪里拆分)。 所以如果我传入“abc | def”作为第一个参数和“|”作为第二个我应该得到一个返回“abc,def”的List,我遇到的问题是我的if语句要求分隔符在当前字符串中被访问。我想不出更好的条件,有什么帮助吗?
public List<String> splitIt(String string, String delimiter){
//create and init arraylist.
List<String> list = new ArrayList<String>();
//create and init newString.
String newString="";
//add string to arraylist 'list'.
list.add(string);
//loops through string.
for(int i=0;i<string.length();i++){
newString += string.charAt(i);
if(newString.contains(delimiter)){
//list.remove(string);
list.add(newString.replace(delimiter, ""));
newString="";
}
}
return list;
}
答案 0 :(得分:1)
使用内置函数split(regex)进行拆分的Badshaah和cmvaxter代码将不起作用。当你通过“|”作为分隔符“sam | ple”它不会被分割为[sam,ple]因为(|,+,*,...)都在正则表达式中用于其他目的。
如果分隔符是字符
,你可以逐个字符地检查loop(each char)
if(not delim)
append to list[i]
else
increment i, discard char
学习目的在c或c ++中可能需要它(甚至他们已经开始分裂字符串)以提高效率或修改不同的东西。 [可能不同地使用正则表达式进行拆分]
最好使用现有的系统库和函数。
如果你想使用你的函数做类似的事情
自己编写这些功能
findpos(delim) // gives position of delimiter found in string
substring(pos,len) //len:size of delimiter
getlist(String str,String delim)
//for each delim found use substring and append to list
使用一些模式匹配算法,如KMP或你知道的东西。
答案 1 :(得分:0)
String
类已经支持split
方法,我认为该方法完全符合您的要求。
String[] s = "abc|def".split("\\|");
List<String> list = Arrays.asList(s);
如果您想自己动手,代码可能如下所示:
char delim = "|".charAt(0);
String s = "abc|def|ghi";
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
List<String> list = new ArrayList<String>();
for(char c: chars){
if (c == delim){
list.add(sb.toString());
sb = new StringBuilder();
}
else{
sb.append(c);
}
}
if (sb.length() > 0) list.add(sb.toString());
System.out.println(list);
答案 2 :(得分:0)
将整个方法更改为。
public List<String> splitIt(String string, String delimiter){
String[] out = string.split(delimiter);
return Arrays.asList(out);
}
答案 3 :(得分:0)
由于您正在遍历字符串,因此if应该基于您正在检查的字符,而不是每次都调用contains:
public List<String> splitIt(String string, String delimiter){
//create and init arraylist.
List<String> list = new ArrayList<String>();
//create and init newString.
String newString="";
//add string to arraylist 'list'.
list.add(string);
//loops through string.
int lastDelimiter = 0;
for (int i=0; i<string.length(); i++) {
if (delimiter.equals("" + string.charAt(i))) {
list.add(string.substring(lastDelimiter, i));
lastDelimiter = i + 1;
}
}
if (lastDelimiter != string.length())
list.add(string.substring(lastDelimiter, string.length()));
return list;
}
为了学习,我认为你原来的尝试适合于递归解决方案。在这种情况下的一般想法是: