2

辞書型アプリを書いています。ハッシュマップされた用語と定義のリストがあります。基本的な前提は、定義を表示するためにタップする単語のリストがあることです。

私はこの機能を稼働させています-私は今、定義の間に動的リンクを配置しようとしています。

例:ユーザーがリスト内のアイテム「犬」をタップしたとします。「小さな毛皮のような[動物]、一般的にペットとして飼われています。[猫]も参照してください。」という定義が表示される場合があります。ユーザーが[動物]または[猫]という単語をクリックして、適切な定義に移動できるようにすることを目的としています。定義内のリンクが角かっこで囲まれていることを確認するのはすでに問題になっているので、ポップアップ文字列をスキャンして[角かっこで囲まれた]テキストを探し、その定義へのリンクを提供するだけです。

定義には複数のリンクを含めることができますが、リンクを含まないものもあることに注意してください。

文字列が表示される前にアクセスできるので、これを行う最善の方法は、ダイアログボックスが表示される前にスキャンを実行してリンクを準備することだと思います。

問題は、角かっこで囲まれたテキストをスキャンして、それらのかっこで囲まれたテキストを返すにはどうすればよいでしょうか。

理想的には、表示される実際のダイアログボックスには角かっこがなく、ダイアログボックスのテキストにハイパーリンクを配置する方法も理解する必要がありますが、その橋を渡ります。

私はJavaに不慣れです-私はMATLABから来て、ただ浮かんでいるところですが、これは私がこれまでに対処しなければならなかったよりも一般的ではないタスクです!

4

2 に答える 2

0

非常に単純だと思います...テキストは角かっこで囲まれているため、すべての文字をスキャンする必要があります。したがって、基本的なレシピは次のようになります。

  • whileループスキャンですべての文字をスキャンします(たとえば、while i < len(text)
  • スキャンした文字が[
    • i++;
    • インデックスの文字をi一時変数に追加します
    • while (character @ i) != ']'一時変数に追加します
    • この一時変数を結果のリストに格納します。

いくつかのヒント:

  • 上記の解決策を使用する場合は、を使用StringBuilderしてテキストを追加します(通常stringは不変です)
  • また、最初にすべての角かっこの開始位置と終了string.substring()位置を保存してから、各ペアでテキストを取得するために使用することもできます(そしてそれが良いと思います) 。このように、最初に定義を繰り返して角かっこを見つけ(おそらく、早期のエラー処理のために、一致しない角かっこをキャッチします)、次にインデックスのペアを繰り返します...

リンクに関しては、おそらくこれが役立つでしょう:文字列リソースからAlertDialogでクリック可能なハイパーリンクを取得するにはどうすればよいですか?

于 2012-08-27T17:59:03.030 に答える
0

おそらく正規表現でこれを行うことができます。このようなもの:

([^[]*)(\[[^]]+\])

これは、2つの「一致グループ」について説明しています。1つ目は、「[」ではない0個以上の文字の文字列を意味し、2つ目は、「[」で始まり、「]」ではない1つ以上の文字を含み、「 ]"。

次に、入力をスキャンして、このパターンに一致するものを探します。最初の一致グループは変更されずに渡され、2番目の一致グループはリンクに変換されます。パターンが入力と一致しなくなったら、残っているものをすべて取り、それも変更せずに送信します。

少し実験する必要があります。正規表現は通常、ある程度のデバッグが必要です。リンクテキストに英数字とスペースしか含めることができない場合、パターンは次のようになります。

([^[]*)(\[[\s\w]+\])

また、Androidでの正規表現のマッチングは遅すぎて実用的ではない場合があります。その場合は、wasylの提案を使用する必要があります。

于 2012-08-27T21:52:51.677 に答える