我的老师特别要求我们在不使用String.split()
的情况下将一个句子分成单词。我使用Vector
(我们尚未学习),while
- 循环和子串完成。有什么其他方法来实现这一目标? (最好不要使用Vectors
/ ArrayLists
)。
答案 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)
你可以使用StringTokenizer http://www.java-samples.com/showtutorial.php?tutorialid=236
答案 6 :(得分:1)
或使用Pattern
(也称为正则表达式)尝试匹配单词。
答案 7 :(得分:1)
答案 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.substring
或charAt[]
。