0

ここに私の問題があります。基本的に、各単語が # で区切られた 4 つの単語を含む文字列があります。私がする必要があるのは、substring メソッドを使用して各単語を抽出し、出力することです。ただし、そのパラメータを理解するのに苦労しています。最初のものはいつでも正しくできますが、次のものは一般的に問題があります。コードの最初の部分は次のとおりです。

word = format.substring( 0 , format.indexOf('#') );

私が理解していることから、これは基本的に文字列の先頭から開始し、# の直前で終了することを意味します。同じロジックを使用して、次のように 2 番目の単語を抽出しようとしました。

wordTwo = format.substring ( wordlength + 1 , format.indexOf('#') ); 
//The plus one so I don't start at the #.

しかし、これを使用すると、存在しないというエラーが継続的に発生します。コンパイラが最初の # を 2 番目の単語の前に読み取ろうとしていると考えたので、次のように書き直しました。

wordTwo = format.substring (wordlength + 1, 1 + wordLength + format.indexOf('#') );

そして、これでは、2番目の単語を出力しないか、適切な場所で停止しないかのいずれかで、完全に台無しになります。これのフォーマットについて何か助けがあれば、大歓迎です。これはクラス用であるため、indexOf、length、substring などの非常に基本的なメソッドの使用に制限されています。

4

6 に答える 6

4

substring を使用する必要がある場合は、 start を取る indexOf のバリアントを使用する必要があります。これは#、最初の検索の後に検索を開始することで、2 番目の検索を開始できることを意味します。いえ

wordTwo = format.substring ( wordlength + 1 , format.indexOf('#', wordlength + 1 ) );

ただし、このように区切り文字で文字列を分割するより良い方法があります。StringTokenizerを使用できます。これは、このような文字列を分割するために設計されています。基本的:

StringTokenizer tok = new StringTokenizer(format, "#");
String word = tok.nextToken();
String word2 = tok.nextToken();
String word3 = tok.nextToken();

または、文字列を分割するために設計されたString.splitメソッドを使用できます。例えば

String[] parts = String.split("#");
String word = parts[0];
String word2 = parts[1];
String word3 = parts[2];
于 2012-09-15T04:57:42.837 に答える
2

split()この種のフォーマット文字列を使用できます。

たとえば、次のような文字列がある場合、

String text = "Word1#Word2#Word3#Word4";

区切り文字を次のように使用できます。

String delimiter = "#";

次に、次のような文字列配列を作成します。

  String[] temp;

文字列を分割するには、

temp = text.split(delimiter);

このような言葉を得ることができます。

temp[0] = "Word1";
temp[1] = "Word2";
temp[2] = "Word3";
temp[3] = "Word4";
于 2012-09-15T04:56:58.343 に答える
1

split()メソッドを使用"#"して区切り文字としてこれを行う

String  s = "hi#vivek#is#good";
String temp = new String();

String[] arr = s.split("#");

for(String x : arr){

  temp = temp + x;
}

または、各単語を正確にしたい場合...すでにそれを持っていますarr

arr[0] ---> First Word
arr[1] ---> Second Word
arr[2] ---> Third Word
于 2012-09-15T04:57:19.490 に答える
0

宿題なので、自分で書いてみたほうがいいかもしれません。しかし、私は手がかりを与えます。

ヒント:

indexOfメソッドには別のオーバーロードがint indexOf(int chr, int fromIndex)あります。これchrは、fromIndex.

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html

この手がかりから、プログラムは次のようになります。

  1. 文字列の先頭から最初のインデックスを見つけ'#'ます。
  2. 0 番目の文字からそのインデックスまでの単語を抽出します。
  3. '#'最初の文字の AFTER から最初のインデックスを見つけます'#'
  4. '#'最初のインデックスから単語を抽出します。... 4 つの単語を取得するか、文字列が終了するまでそれを行います。

お役に立てれば。

于 2012-09-15T05:09:37.893 に答える
0

を使用せざるを得ない理由はわかりませんString#substringが、他の人が述べているように、必要な機能に対して間違った方法のようです。

String#split(String regex)このような問題に使用するものです。または、入力シーケンスが制御できないものである場合は、オーバーロードされたメソッドを確認することをお勧めしますString#split(String regex, int limit)。このようにして、一致の数に制限を課し、結果の配列を制御できます。

于 2012-09-15T05:15:49.160 に答える
0

先に進む前に、String の Javadoc を確認することをお勧めします。

これはあなたの宿題なので、いくつかのヒントを提供します。おそらくあなたは自分で解決できるでしょう。

  • subStringの形式はpublic void subString(int beginIndex, int endIndex). このメソッドのjavadocによると:

この文字列の部分文字列である新しい文字列を返します。部分文字列は、指定された beginIndex で始まり、インデックス endIndex - 1 の文字まで拡張されます。したがって、部分文字列の長さは endIndex-beginIndex になります。

このメソッドを使用する必要がある場合は、beginIndex と endIndex を毎回シフトする必要があることに注意してください。状況によっては、# で区切られた複数の単語があるためです。

  • ただし、よく見ると、String クラスに役立つ別のメソッドがあります。それがpublic String[] split(String regex)方法です。これのjavadocには次のように記載されています。

指定された正規表現の一致に基づいてこの文字列を分割します。このメソッドは、指定された式とゼロの制限引数を使用して 2 引数の split メソッドを呼び出すかのように機能します。したがって、後続の空の文字列は、結果の配列には含まれません。

このsplit()方法は、あなたの場合にはかなり興味深いようです。このメソッドのパラメーターとして持っている区切り文字で文字列を分割し、文字列配列を取得してそれを操作できます。

これが問題を理解し、解決策を開始するのに役立つことを願っています:)

于 2012-09-15T04:59:55.433 に答える