如何在Java中不使用String.split()方法将字符串拆分为单词?

5

我的老师要求我们将一句话分成单词,但不能使用String.split()。我已经使用Vector(我们还没学过)、while-循环和子字符串完成了任务。有没有其他方法可以实现这个功能?(最好不使用Vectors/ArrayLists)。


问题的确切陈述是什么?它只是列举了你不能使用什么吗?还有其他提示吗? - Tudor
5
不要养成使用Vector的习惯,它已被ArrayList取代。 - Marko Topolnik
2
如果你的老师要求这样做,那么他希望能够自己完成,而不是让别人替你完成。我认为他希望你使用String的indexOf(String, int)方法来完成某些任务。 - Flavio Cysne
@FlavioCysne 这是在测试中出现的问题。我在测试中使用了indexOf,但代码看起来很混乱。我正在寻找更简洁的解决方法。 - Leo Jiang
16个回答

1
public class MySplit {

public static String[] mySplit(String text,String delemeter){
    java.util.List<String> parts = new java.util.ArrayList<String>();
    text+=delemeter;        

    for (int i = text.indexOf(delemeter), j=0; i != -1;) {
        parts.add(text.substring(j,i));
        j=i+delemeter.length();
        i = text.indexOf(delemeter,j);
    }


    return parts.toArray(new String[0]);
}

public static void main(String[] args) {
    String str="012ab567ab0123ab";
    String delemeter="ab";
    String result[]=mySplit(str,delemeter);
    for(String s:result)
        System.out.println(s);
}

}

1
简单的触摸!如果您想要改进,可以这样做。
包 com.asif.test;
公共类 SplitWithoutSplitMethod {
public static void main(String[] args) {

    split('@',"asif@is@handsome");
}

static void split(char delimeter, String line){

    String word = "";
    String wordsArr[] = new String[3];

    int k = 0;
    for(int i = 0; i <line.length(); i++){

        if(line.charAt(i) != delimeter){
            word+= line.charAt(i);
        }else{
            wordsArr[k] = word;
            word = "";
            k++;                    
        }
    }
    wordsArr[k] = word;
    for(int j = 0; j <wordsArr.length; j++)
    System.out.println(wordsArr[j]);

}

}


0
请尝试这个。
  public static String[] mysplit(String mystring) {

    String string=mystring+" ";               //append " " bcz java string does not hava any ending character
    int[] spacetracker=new int[string.length()];// to count no. of spaces in string
    char[] array=new char[string.length()];     //store all non space character
    String[] tokenArray=new String[string.length()];//to return token of words

    int spaceIndex=0;
    int parseIndex=0;
    int arrayIndex=0;
    int k=0;
    while(parseIndex<string.length())
    {
        if(string.charAt(parseIndex)==' '||string.charAt(parseIndex)==' ')
        {
            spacetracker[spaceIndex]=parseIndex;
            spaceIndex++;
            parseIndex++;
        }else
        {
        array[arrayIndex]=string.charAt(parseIndex);
        arrayIndex++;
        parseIndex++;
        }
    }


    for(int i=0;i<spacetracker.length;i++)
    {
        String token="";
        for(int j=k;j<(spacetracker[i])-i;j++)
        {
            token=token+array[j];
            k++;

        }
        tokenArray[i]=token;
        //System.out.println(token);
        token="";

    }
    return tokenArray;
}

希望这能有所帮助。

0

您可以使用Java Pattern轻松完成它。

package com.company;

import java.util.regex.Pattern;

public class umeshtest {

    public static void main(String a[]) {
        String ss = "I'm Testing and testing the new feature";
        Pattern.compile(" ").splitAsStream(ss).forEach(s -> System.out.println(s));
    }
}

0
import java.util.*;
class StringSplit {
    public static void main(String[] args) 
    {
        String s="splitting a string without using split()";
        ArrayList<Integer> al=new ArrayList<Integer>();     //Instead you can also use a String 
        ArrayList<String> splitResult=new ArrayList<String>();
        for(int i=0;i<s.length();i++)
            if(s.charAt(i)==' ')
                al.add(i);
        al.add(0, 0);
        al.add(al.size(),s.length());
        String[] words=new String[al.size()];
        for(int j=0;j<=words.length-2;j++)
                splitResult.add(s.substring(al.get(j),al.get(j+1)).trim());
        System.out.println(splitResult);
    }
}

时间复杂度:O(n)

-3
你还可以使用 String.substring 或者 charAt[]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接