文字列内の部分文字列のすべての出現を見つける -- java フィールド と string フィールド と substring フィールド と find-occurrences フィールド 関連 問題

Finding all occurrences of a substring in a string












-1
vote

問題

日本語

私が与えられているStackTraceにパッケージ名を含むすべての行を見つけようとしています。これが私が持っているものです:

<事前> <コード> Log.d("result", result); ArrayList<String> allOccurences = new ArrayList<String>(); int lastIndex = 0; int count = 0; String packageName = context.getPackageName(); while(lastIndex != -1) { lastIndex = result.indexOf(packageName, lastIndex); if(lastIndex != -1) { String line = result.substring(lastIndex, packageName.length()); allOccurences.add(line); lastIndex += packageName.length(); } } for (int i = 0; i < allOccurences.size(); i++) { System.out.println(allOccurences.get(i)); }

を削除した場合 <事前> <コード> String line = result.substring(lastIndex, packageName.length()); allOccurences.add(line);

それはちょうどうまく機能します。なぜ把握するようには思えないようです。

これは私が検索しているスタックトレースです:

<事前> <コード> 06-18 20:43:59.455: D/result(1975): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.madqa/com.madqa.AndroidMADQAActivity}: java.lang.NullPointerException 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread.access$600(ActivityThread.java:141) 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 06-18 20:43:59.455: D/result(1975): at android.os.Handler.dispatchMessage(Handler.java:99) 06-18 20:43:59.455: D/result(1975): at android.os.Looper.loop(Looper.java:137) 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread.main(ActivityThread.java:5041) 06-18 20:43:59.455: D/result(1975): at java.lang.reflect.Method.invokeNative(Native Method) 06-18 20:43:59.455: D/result(1975): at java.lang.reflect.Method.invoke(Method.java:511) 06-18 20:43:59.455: D/result(1975): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-18 20:43:59.455: D/result(1975): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-18 20:43:59.455: D/result(1975): at dalvik.system.NativeStart.main(Native Method) 06-18 20:43:59.455: D/result(1975): Caused by: java.lang.NullPointerException 06-18 20:43:59.455: D/result(1975): at com.madqa.AndroidMADQAActivity.onCreate(AndroidMADQAActivity.java:22) 06-18 20:43:59.455: D/result(1975): at android.app.Activity.performCreate(Activity.java:5104) 06-18 20:43:59.455: D/result(1975): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-18 20:43:59.455: D/result(1975): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-18 20:43:59.455: D/result(1975): ... 11 more

パッケージ名は "com.madqa"です。 STACKTRACEには3つの発生があります。それらを見つけて、それぞれを印刷したいです。 (Com.Madqa 3回印刷する必要があります)

英語

I'm trying to find all the lines that include the package name in the stacktrace that I am given. Here's what I have:

Log.d("result", result);         ArrayList<String> allOccurences = new ArrayList<String>();         int lastIndex = 0;         int count = 0;         String packageName = context.getPackageName();          while(lastIndex != -1) {             lastIndex = result.indexOf(packageName, lastIndex);             if(lastIndex != -1) {                 String line = result.substring(lastIndex, packageName.length());                 allOccurences.add(line);                 lastIndex += packageName.length();             }         }          for (int i = 0; i < allOccurences.size(); i++) {             System.out.println(allOccurences.get(i));         } 

If I remove

String line = result.substring(lastIndex, packageName.length()); allOccurences.add(line); 

it works just fine. I can't seem to figure out why. Any help?

Here's the stacktrace that i am searching:

06-18 20:43:59.455: D/result(1975): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.madqa/com.madqa.AndroidMADQAActivity}: java.lang.NullPointerException 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread.access$600(ActivityThread.java:141) 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 06-18 20:43:59.455: D/result(1975):     at android.os.Handler.dispatchMessage(Handler.java:99) 06-18 20:43:59.455: D/result(1975):     at android.os.Looper.loop(Looper.java:137) 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread.main(ActivityThread.java:5041) 06-18 20:43:59.455: D/result(1975):     at java.lang.reflect.Method.invokeNative(Native Method) 06-18 20:43:59.455: D/result(1975):     at java.lang.reflect.Method.invoke(Method.java:511) 06-18 20:43:59.455: D/result(1975):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 06-18 20:43:59.455: D/result(1975):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 06-18 20:43:59.455: D/result(1975):     at dalvik.system.NativeStart.main(Native Method) 06-18 20:43:59.455: D/result(1975): Caused by: java.lang.NullPointerException 06-18 20:43:59.455: D/result(1975):     at com.madqa.AndroidMADQAActivity.onCreate(AndroidMADQAActivity.java:22) 06-18 20:43:59.455: D/result(1975):     at android.app.Activity.performCreate(Activity.java:5104) 06-18 20:43:59.455: D/result(1975):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 06-18 20:43:59.455: D/result(1975):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 06-18 20:43:59.455: D/result(1975):     ... 11 more 

the package name is "com.madqa". There are 3 occurences in the stacktrace. I want to find them and print each one of them out. (it should print com.madqa 3 times)

</div
           
     
     

回答リスト

2
 
vote
vote
ベストアンサー
 

i++3 は、インデックスと長さではなく2つのインデックスを取ります。このように、 i++4 <コード> i++5 を追加する必要があります。

<事前> <コード> i++6

この変更をすると、コードが機能するはずです。

href="http://ideone.com/yi0mfy" rel="nofollow">イデオンのデモ。

 

substring takes two indexes, not an index and a length. You need to add lastIndex to packageName.length(), like this:

String line = result.substring(lastIndex, lastIndex+packageName.length()); 

Once you make this change, your code should work.

Demo on ideone.

</div
 
 
 
 

関連する質問

1  Android:SDカード上のファイル上の単語の発生をカウントする  ( Android counting occurrence of words on file on sd card ) 
これはまっすぐ前進するべきですが、私がそれを私のSDカードにダウンロードした後にファイルの単語を数えると、その数はオフのようです。また、より多くの出来事があるほど、私の結果はオフのようです。 Microsoft Wordを使用して、発生回数を確認します(無視事...

3  Paragraghのタグ付けフレーズ  ( Tagging phrases in paragragh ) 
PHPを使っていて、私はテキスト内のリンクをサイトの他のセクションに作成しようとしています。例えば: <事前> <コード> I fell into the media industry aged 30, when David Mansfield, now o...

3  CSVファイル内のペアの複数の出現を見つける  ( Finding multiple occurrences of pairs in csv file ) 
CSVファイルを検索するPythonスクリプトを作成し、2つの項目が隣接しているときに発生数を識別しようとしています。 例えば、CSVは次のようになるとしましょう。 <事前> <コード> red,green,blue,red,yellow,green,ye...

-1  Pythonでカップルのリストの発生をカウントし、最初のリスト内のすべての要素を持つ新しいリストに結果を追加します。  ( Count occurence of list of couple in python and append result to new list with a ) 
私はこれを持っています: <事前> <コード> list = [ (('hash1', 'hash2'), (436, 1403)), (('hash1', 'hash2'), (299, 1282)), (('hash2', 'has...

12  ストップワードを含めて除外するテキストの最も頻繁に発生する単語を印刷する  ( Print 10 most frequently occurring words of a text that including and excluding ) 
私は私の変更を伴うをここにありました。次のコードがあります: <事前> <コード> from nltk.corpus import stopwords >>> def content_text(text): stopwords = nltk.corpu...

0  Rのカテゴリカル変数の発生を数える  ( Count the occurrence of categorical variables in r ) 
私は3つのカテゴリカル変数からなるデータフレームを持っています、そして、私は各組み合わせの周波数を見つけ、その結果を降順に降順で並べ替えたいのです。 マイデータ: <事前> <コード> A LEVEL1 PASS A LEVEL1 FAIL ...

0  過去30日間のイベントの発生数を数える  ( Count the number of occurrences of the event with the last 30 days ) 
私は、Rの過去30日以内に人が連絡された回数を数えたいのです。ここにデータがあります: <事前> <コード> > df1 ID Date Time Call_Status Date_Time x 7 1...

-1  Rubyのテキストファイル内の単語の発生の数の数値を数える方法  ( How to count the no of occurrences of a word in a text file in ruby ) 
私はそれがどのように可能であるか知りたいのですが 1)入力としてTXTファイルを入手してください。 2)単語や単語が発生する回数の数を数える!たとえば、私は数回の数字を数えたいとしたいということが、テキストファイルで見つけてそれを印刷する! Rubyを使ってこ...

1  文字をカウントし、PHPまたはSQLで発生率を取得します。  ( Count characters and get percentage of occurrence in php or sql ) 
2列の2つの表を持つデータベースがあります<コード> FirstName LastName そして私の名前は Bruce Wayne です。したがって、私が欲しいものは私にこれを与える出力です: <コード> a 1 10% B 1 10% c 1 1...

-2  辞書を作成するためにFromKeysを使用してください  ( Using fromkeys to create a dictionary ) 
私はPython に書いています 私は「ポジション」と呼ばれるタプルのリストを持っています。これらのタプルのいくつかは 'ポジション'で1以上の出発を持っています。コードを指定してDという名前の辞書を作成したい: <事前> <コード> d["positions...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有