0

楽譜(歌詞の上のコード)を取り、キーを移調するプログラムを書いています。曲の文字列を分割し、コード名を操作して新しい文字列を作成することを選択しています。私のアプローチは、曲を行に分割することですString[] holder = song.split("\\n+"); 。次に、各行を取得し、空白に基づいて分割しますString[] oneLine = s.split("\\s");

新しい弦を作るときは、元の間隔を維持することが絶対に重要です。私の問題は、// sで分割すると、間隔の履歴がすべて失われることです。誰かが私の問題の解決策を提案できますか?

これがサンプルソングです

String song = "G   Em  C   D\nSome Lyrics Go Here\nG   C   D\nOther Lyrics Go Here";

現在、私の転置された曲は次のようになります...

AF#mDE
Some Lyrics Go Here
ADE
Other Lyrics Go Here
4

2 に答える 2

1

を使用しStringTokenizerて文字列を分割する場合は、区切り文字を保持して返すように構成することもできます。このようにして、スペースの数を維持できます。

StringTokenizer(String,String,boolean)コンストラクターを参照してください。

public StringTokenizer(String str、String delim、boolean returnDelims)

指定された文字列の文字列トークナイザーを構築します。引数のすべての文字は、delimトークンを区切るための区切り文字です。

フラグがtrueの場合returnDelims、区切り文字もトークンとして返されます。各区切り文字は、長さ1の文字列として返されます。フラグがfalseの場合、区切り文字はスキップされ、トークン間の区切り文字としてのみ機能します。

delimnullの場合、このコンストラクターは例外をスローしないことに注意してください。ただし、結果のStringTokenizerで他のメソッドを呼び出そうとすると、NullPointerExceptionが発生する可能性があります。

パラメータ:
str -解析される文字列。
delim-区切り文字。
returnDelims-区切り文字をトークンとして返すかどうかを示すフラグ。

于 2012-05-24T03:15:44.400 に答える
0

お気づきのように、間隔を破棄するものを使用する代わりに、String.split()他の手法を使用する必要があります。ループ内で一度に1文字ずつ各行を処理し、処理された各文字をに追加するStringBuilderだけで、最終的には同じ数の文字になります。

于 2012-05-24T03:13:12.983 に答える