0

問題:

これにはJava Tutorials™</a> ソースコードを使用しています。これがソースコードです。

私はこれを試しました:

--following with another section of sorted words--
words.add("count");
words.add("cvs");
words.add("dce"); 
words.add("depth");
--following with another section of sorted words--

そしてそれは完全に機能します。ただし、これを使用すると:

--just a section of sorted words--
words.add("count");
words.add("cvs");
words.add("dce_iface"); 
words.add("dce_opnum");
words.add("dce_stub_data");
words.add("depth");
--following with another section of sorted words--

dce_ifaceと入力すると表示されますdceが、入力_してからoorを入力すると、オフセットがリストのどこから来るかsなどの別のものが表示されます。dce_offsetwords.add("fragoffset");

この問題を解決するにはどうすればよいですか? 前もって感謝します。

4

3 に答える 3

1

ここに「文字」としてアンダースコアを追加する必要があると思います

        // Find where the word starts
        int w;
        for (w = pos; w >= 0; w--) {
            if (!Character.isLetter(content.charAt(w))) {
                break;
            }
        }
于 2010-04-26T15:03:44.487 に答える
1

それはのこのセクションと関係がありますinsertUpdate()

// Find where the word starts
int w;
for (w = pos; w >= 0; w--) {
    if (! Character.isLetter(content.charAt(w))) {
        break;
    }
}

具体的にCharacter.isLetter()は、アンダースコア文字に対してfalseを返します。つまり、単語はアンダースコアの位置の後に始まります。

これを解決するには、ifステートメントを変更して、単語で使用する文字以外の文字を許可する必要があります。'_'を明示的にチェックするかChacter.isWhiteSpace()、スペース、タブ、または改行以外のすべての文字を含めるために使用できます。

于 2010-04-26T15:04:30.443 に答える
1

おそらく、コード内の次の行が原因です。

for (w = pos; w >= 0; w--) {
    if (! Character.isLetter(content.charAt(w))) {
        break;
    }
}

_は文字ではないため、スペースと同じように扱います。条件を次のように変更してみてください。

char c = content.charAt(w);
if (! (Character.isLetter(c) || c == '_')) {
于 2010-04-26T15:00:20.103 に答える