Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在指定点拆分字符串_Java_String_Arraylist_Split_Delimiter - Fatal编程技术网

Java 在指定点拆分字符串

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.

因此,该方法采用两个参数,第一个是要拆分的字符串,第二个是分隔符(拆分位置)。 因此,如果我传入“abc | def”作为第一个参数,“|”作为第二个参数,我应该会得到一个返回“abc,def”的列表,我遇到的问题是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;
}
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