5

我的老师特别要求我们将一个句子分成单词而不使用String.split()。我已经使用 a Vector(我们还没有学过)、- whileloop 和子字符串来完成它。还有什么其他方法可以做到这一点?(最好不使用Vectors/ ArrayLists)。

4

15 回答 15

13

我相信您的老师要求您自己处理字符串(不使用任何其他库为您完成)。检查是否是这种情况 - 如果可以使用它们,则有诸如 StringTokenizer、Pattern 和 Scanner 之类的东西来促进字符串处理。

除此以外...

您将需要一个单词分隔符列表(例如空格、制表符、句点等),然后遍历数组,一次构建一个字符串,直到您点击单词分隔符。找到一个完整的单词后(你遇到了一个单词分隔符),将它的变量保存到你的结构中(或任何需要的),重置你正在构建单词的变量并继续。

于 2012-05-07T17:13:29.653 回答
4

逐个字符解析字符串,将每个字符复制到一个新字符串中,并在遇到空白字符时停止。然后开始一个新字符串并继续,直到到达原始字符串的末尾。

于 2012-05-07T17:09:10.333 回答
3

您可以使用java.util.StringTokenizer使用所需的分隔符拆分文本。默认分隔符是 SPACE/TAB/NEW_LINE。

String myTextToBeSplit = "This is the text to be split into words.";  
StringTokenizer tokenizer = new StringTokenizer( myTextToBeSplit );  
while ( tokinizer.hasMoreTokens()) {  
    String word = tokinizer.nextToken();  
    System.out.println( word ); // word you are looking in  
}  

作为替代方案,您还可以使用java.util.Scanner

Scanner s = new Scanner(myTextToBeSplit).useDelimiter("\\s");  
while( s.hasNext() ) {  
System.out.println(s.next());  
}  
s.close();  
于 2012-05-07T17:14:37.377 回答
2

您可以使用 java.util.Scanner。

于 2012-05-07T17:08:46.363 回答
2
import java.util.Arrays;
public class ReverseTheWords {

    public static void main(String[] args) {
        String s = "hello java how do you do";
        System.out.println(Arrays.toString(ReverseTheWords.split(s)));
    }

    public static String[] split(String s) {
        int count = 0;
        char[] c = s.toCharArray();

        for (int i = 0; i < c.length; i++) {
            if (c[i] == ' ') {
                count++;
            }
        }
        String temp = "";
        int k = 0;
        String[] rev = new String[count + 1];
        for (int i = 0; i < c.length; i++) {
            if (c[i] == ' ') {
                rev[k++] = temp;
                temp = "";
            } else
                temp = temp + c[i];
        }
        rev[k] = temp;
        return rev;
    }

}
于 2016-10-09T16:36:28.780 回答
1

你可以使用 StringTokenizer http://www.java-samples.com/showtutorial.php?tutorialid=236

于 2012-05-07T17:07:07.890 回答
1

或者使用 a Pattern(也称为正则表达式)来尝试匹配单词。

于 2012-05-07T17:09:07.290 回答
1
  • 使用带有 ctor 的扫描仪(字符串)
  • 正则表达式和匹配
  • 字符串标记器
  • 逐个字符地迭代自己
  • 递归迭代
于 2012-05-07T17:13:27.523 回答
1

不使用Vector/ List(并且不手动重新实现它们为您的函数重新调整大小的能力),您可以利用简单的观察,即长度的字符串N不能超过(N+1)/2单词(整数除法)。您可以声明一个该大小的字符串数组,以与填充相同的方式填充它Vector,然后将结果复制到您找到的单词数大小的数组中。

所以:

String[] mySplit( String in ){
    String[] bigArray = new String[ (in.length()+1)/2 ];

    int numWords = 0;
    // Populate bigArray with your while loop and keep
    // track of the number of words

    String[] result = new String[numWords];
    // Copy results from bigArray to result

    return result;
}
于 2012-05-07T21:39:06.607 回答
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);
}

}
于 2014-03-15T17:56:40.427 回答
1
public class sha1 {
public static void main(String[] args) {
    String s = "hello java how do you do";
    System.out.println(Arrays.toString(sha1.split(s)));
}
public static String[] split(String s) {
    int count = 0;
    char[] c = s.toCharArray();

    for (int i = 0; i < c.length; i++) {
        if (c[i] == ' ') {
            count++;
        }
    }
    String temp = "";
    int k = 0;
    String[] rev = new String[count + 1];
    for (int i = c.length-1; i >= 0; i--) {
        if (c[i] == ' ') {
            rev[k++] = temp;
            temp = "";
        } else
            temp = temp + c[i];
    }
    rev[k] = temp;
    return rev;
}

}

于 2016-10-14T07:04:47.083 回答
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]);

}

}

于 2016-11-04T02:11:22.867 回答
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;
}

希望这可以帮助

于 2016-07-20T12:09:19.240 回答
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)

于 2017-03-23T06:20:02.257 回答
-3

您也可以使用String.substringcharAt[]

于 2012-05-07T17:44:01.777 回答