如何在不使用String.split()的情况下将字符串拆分为Java中的单词?

时间:2012-05-07 17:04:34

标签: java string

我的老师特别要求我们在不使用String.split()的情况下将一个句子分成单词。我使用Vector(我们尚未学习),while - 循环和子串完成。有什么其他方法来实现这一目标? (最好不要使用Vectors / ArrayLists)。

15 个答案:

答案 0 :(得分:13)

我相信你的老师要求你自己处理字符串(不使用任何其他库来为你做)。检查是否是这种情况 - 如果你可以使用它们,有一些东西,如StringTokenizer,Pattern和Scanner,以方便字符串处理。

...否则

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

您可以使用java.util.Scanner。

答案 3 :(得分:2)

您可以使用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();  

答案 4 :(得分:2)

{{1}}

答案 5 :(得分:1)

答案 6 :(得分:1)

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

答案 7 :(得分:1)

  • 使用带有ctor(String)的扫描仪
  • 正则表达式和匹配
  • 的StringTokenizer
  • 通过char
  • 迭代自己的char
  • 递归迭代

答案 8 :(得分:1)

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

所以:

Vector

答案 9 :(得分: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);
}

}

答案 10 :(得分: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;
}

}

答案 11 :(得分:1)

简单的触摸。如果你愿意,可以改善。

package com.asif.test;

public class SplitWithoutSplitMethod {

fig.align = 'center'

}

答案 12 :(得分: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;
}

希望这有帮助

答案 13 :(得分: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)

答案 14 :(得分:-3)

您还可以使用String.substringcharAt[]