Java 在指定点拆分字符串
因此,该方法采用两个参数,第一个是要拆分的字符串,第二个是分隔符(拆分位置)。 因此,如果我传入“abc | def”作为第一个参数,“|”作为第二个参数,我应该会得到一个返回“abc,def”的列表,我遇到的问题是if语句要求分隔符位于要访问的当前字符串中。我想不出更好的条件了,有什么帮助吗Java 在指定点拆分字符串,java,string,arraylist,split,delimiter,Java,String,Arraylist,Split,Delimiter,因此,该方法采用两个参数,第一个是要拆分的字符串,第二个是分隔符(拆分位置)。 因此,如果我传入“abc | def”作为第一个参数,“|”作为第二个参数,我应该会得到一个返回“abc,def”的列表,我遇到的问题是if语句要求分隔符位于要访问的当前字符串中。我想不出更好的条件了,有什么帮助吗 public List<String> splitIt(String string, String delimiter){ //create and init arraylist.
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;
}
public List splitIt(字符串、字符串分隔符){
//创建并初始化arraylist。
列表=新的ArrayList();
//创建并初始化新闻字符串。
字符串newString=“”;
//将字符串添加到arraylist“列表”。
list.add(字符串);
//在字符串中循环。
对于(int i=0;i,String
类已经支持了一个split
方法,我相信它正是您想要做的
String[] s = "abc|def".split("\\|");
List<String> list = Arrays.asList(s);
String[]s=“abc|def”.split(\\\\\;”;
列表=数组.asList;
如果您想自己完成,代码可能如下所示:
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);
char-delim=“|”;
字符串s=“abc | def | ghi”;
char[]chars=s.toCharArray();
StringBuilder sb=新的StringBuilder();
列表=新的ArrayList();
for(char c:chars){
if(c==delim){
添加(sb.toString());
sb=新的StringBuilder();
}
否则{
sb.附加(c);
}
}
如果(sb.length()>0)list.add(sb.toString());
系统输出打印项次(列表);
将整个方法更改为
public List<String> splitIt(String string, String delimiter){
String[] out = string.split(delimiter);
return Arrays.asList(out);
}
public List splitIt(字符串、字符串分隔符){
String[]out=String.split(分隔符);
返回数组.asList(out);
}
由于您正在迭代字符串,您的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;
}
public List splitIt(字符串、字符串分隔符){
//创建并初始化arraylist。
列表=新的ArrayList();
//创建并初始化新闻字符串。
字符串newString=“”;
//将字符串添加到arraylist“列表”。
list.add(字符串);
//在字符串中循环。
int lastdimiter=0;
对于(int i=0;iBadshaah和cmvaxter,使用内置函数拆分(regex)进行拆分的代码将不起作用。当您将“|”作为分隔符“sam | ple”传递时,它将不会拆分为[sam,ple],因为(|,+,*,…)在regex中都用于其他目的
如果分隔符是一个字符,则可以逐个字符进行检查
loop(each char)
if(not delim)
append to list[i]
else
increment i, discard char
P>学习目的:C或C++中可能需要(甚至他们已经用Strutk来分割字符串)来提高效率或修改不同的东西。
最好使用现有的系统库和函数
如果你想使用你的函数,做如下的事情
自己编写这些函数
使用一些模式匹配算法,如KMP或您知道的东西。返回一个字符串[]
,您可以将其元素放入列表中。我这样做是为了学习,我不想使用内置的拆分方法,谢谢:)。在SO上发布问题时,请礼貌地将其正确缩进(注意:制表符不正确),并使用预览来验证您的问题的格式是否正确。如果分隔符超过一个字符,请使用indexOf
在字符串中查找分隔符。除了删除列表。删除(字符串);
和列表。添加(新闻字符串)之外,此问题与您的问题有何不同;
在当前代码中?也可以使用string.indexOf(delimiter)
来确定字符串是否包含分隔符,以及string.substring(start,end)
来获取感兴趣的部分吗?我这样做是为了学习的好处,我不想使用内置的拆分方法,谢谢:)。更新了我的方法以逃避|。很好的捕获。。。
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