私の先生は、 を使わずに文を単語に分割することを特に要求しましたString.split()
。Vector
(まだ学習していません)、ループ、部分文字列を使用して実行しましたwhile
。これを達成する他の方法は何ですか?(できればVectors
/を使用しないでArrayLists
ください)。
15 に答える
先生は文字列を自分で処理するように求めていると思います (他のライブラリを使用せずに)。これが当てはまるかどうかを確認します。使用できる場合は、文字列処理を容易にする StringTokenizer、Pattern、Scanner などがあります。
さもないと...
単語の区切り記号 (スペース、タブ、ピリオドなど) のリストが必要になります。次に配列を調べて、単語の区切り記号に到達するまで一度に 1 文字ずつ文字列を作成します。完全な単語を見つけた後 (単語区切り文字に遭遇した場合)、変数を構造体 (または必要なもの) に保存し、単語を作成している変数をリセットして続行します。
文字列を文字ごとに解析し、各文字を新しい文字列にコピーし、空白文字に到達すると停止します。次に、新しい文字列を開始し、元の文字列の最後に到達するまで続行します。
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();
java.util.Scannerを使用できます。
StringTokenizerhttp://www.java-samples.com/showtutorial.php?tutorialid=236を使用でき ます
または、Pattern
(正規表現とも呼ばれます)を使用して単語を一致させます。
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;
}
}
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;
}
- ctor (文字列) でスキャナーを使用する
- 正規表現と一致
- StringTokenizer
- 文字ごとに自分自身を繰り返す
- 再帰的反復
String.substring
またはも使用できますcharAt[]
。