1

たとえば、次の文字列があります。

0no1no2yes3yes4yes

ここの最初の 0 は削除して、配列のインデックスとして使用する必要があります。私はこの声明によってそうしています:

string = string.replaceFirst(dataLine.substring(0, 1), "");

ただし、この文字列を言うと:

10yes11no12yes13yes14no

を処理したいのです10が、私のコードは1.

したがって、並べ替えでは、1 桁は正常に機能しますが、2 桁または 3 桁はIndexOutOfBoundエラーになります。

コードは次のとおりです: http://pastebin.com/uspYp1FK

そして、ここにいくつかのサンプルデータがあります: http://pastebin.com/kTQx5WrJ

サンプル データの出力は次のとおりです。

Enter filename: test.txt
Data before cleanUp: {"assignmentID":"2CCYEPLSP75KTVG8PTFALQES19DXRA","workerID":"AGMJL8K9OMU64","start":1359575990087,"end":"","elapsedTime":"","itemIndex":0,"responses":[{"jokeIndex":0,"response":"no"},{"jokeIndex":1,"response":"no"},{"jokeIndex":2,"response":"yes"},{"jokeIndex":3,"response":"yes"},{"jokeIndex":4,"response":"yes"}],"mturk":"yes"},
Data after cleanUp: 0no1no2yes3yes4yes
Data before cleanUp: {"assignmentID":"2118D8J3VE7W013Z4273QCKAGJOYID","workerID":"A2P0GYVEKGM8HF","start":1359576154789,"end":"","elapsedTime":"","itemIndex":3,"responses":[{"jokeIndex":15,"response":"no"},{"jokeIndex":16,"response":"no"},{"jokeIndex":17,"response":"no"},{"jokeIndex":18,"response":"no"},{"jokeIndex":19,"response":"no"}],"mturk":"yes"},
Data after cleanUp: 15no16no17no18no19no
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 2
    at java.lang.String.substring(String.java:1907)
    at jokes.main(jokes.java:34)

基本的に、コードが行うことになっているのは、上記のようにデータを文字列に取り除き、数値を読み取り、その後yesに のインデックスの値の増加がdataYes続く場合、またはの値のno増加が続く場合dataNoです。理にかなっていますか?

私に何ができる?コードをより柔軟にするにはどうすればよいですか?

4

4 に答える 4

0

それはあなたのために働きますか?

string = string.replaceAll("^\\d+","");
于 2013-01-31T13:40:10.730 に答える
0

どうですか: -

String regex = "^\\d+";
String myStr = "10abc11def";

Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(myStr);

if(m.find())
{
    String digits = m.group();
    myStr = m.replaceFirst("");
}
于 2013-01-31T13:56:18.703 に答える
0

これを試して

    System.out.println("10yes11no12yes13yes14no".replaceFirst("^\\d+",""));
于 2013-01-31T14:47:01.300 に答える
0

別の、より具体的な試み: -

    String regex = "^(\\d+)(yes|no)";
    String myStr = "10yes11no";

    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(myStr);

    while (m.find())
    {
        String all = m.group();
        String digits = m.group(1);
        String bool = m.group(2);

        // do not try and combine the next 2 lines ... it doesn't work!
        myStr = myStr.substring(all.length());
        m.reset(myStr);

        System.out.println(String.format("all = %s, digits = %s, bool = %s", all, digits, bool));
    }
于 2013-01-31T15:29:40.527 に答える