0

この形式のような文字列があります

番号。件名、大学名、場所 2

このようなフォーマットを並べ替えたい

Number. Uni Name, Subject, Location 2

この方法で操作を行うことができます

int index = Order .indexOf(",");
String newStr =Order .substring(index + 1, Order .length());

しかし、すべての文字列は異なる名前と長さを持っていると思うので、これはうまくいかないかもしれません. それで、私の質問は、効率的な方法で文字列形式を動的に並べ替えるにはどうすればよいですか?

質問が更新されました

4

7 に答える 7

0

1つの方法は正規表現です。これはおそらく最も効率的な方法ではありませんが、かなりクリーンです。

public static void main(String args[]) {
    final Pattern pattern = Pattern.compile("(\\d++)\\.([^,]++),\\s*+([^,]++),\\s*+(.*+)");
    final Matcher matcher = pattern.matcher("");
    //for each input string
    final String input = "Subject, Uni Name, Location 2";
    matcher.reset(input);
    final String output = matcher.replaceAll("$1, $3, $2, $4");
    System.out.println(output);
}

したがって、最大速度のためにプリコンパイルしてPattern再利用します。Matcher次に、replaceAll各入力に対して a を実行するだけですString

于 2013-09-19T15:56:04.390 に答える
0

このようなものはうまくいくかもしれません:

String s = "Subject, Uni Name, Location 2";
String[] sp = s.split(",");
String finalString = sp[1] + "," + sp[0] + "," + sp[2];

StringBuilder を使用して finalString 構成を行うことを検討してください。

于 2013-09-19T15:49:46.293 に答える
0

このような生の文字列ではこれを行わないでください。オブジェクトを使用します。

class ReportHeader {
    String number;
    String name;
    String subject;
    String location;

    ReportHeader(number,name,subject,location) {
        this.number = number;
        this.name = name;
        this.subject = subject;
        this.location = location;
    }

}

class interface HeaderFormat {
    String toString(ReportHeader header);
}

// this is how Wilson likes his reports
class ProfessorWilsonsHeaderFormat implements HeaderFormat { 
    public String toString(ReportHeader header) {
        return header.number + "," + header.name + "," + header.subject + "," + header.location;
    }
}

// this is how Thomspon likes his reports
class ProfessorThompsonsHeaderFormat implements HeaderFormat { 
    public String toString(ReportHeader header) {
        return header.number + "," + header.subject + "," + header.name + "," + header.location;
    }
}
于 2013-09-19T16:50:50.510 に答える
0

使用する:

String s = "Subject, Uni Name, Location 2";
String[] strs = s.split(",");

次に、必要な順序で結果を結合します (余分なスペースを取り除くために trim() を使用し、必要な場所にそれらを追加しました)。

String t = strs[1].trim() + ", " + strs[0].trim() + ", " + strs[2].trim();

これを頻繁に (たとえばループで) 行う場合は、StringBuilder を使用して結果の文字列を作成します。これははるかに効率的 (かつ慣用的) です。

于 2013-09-19T15:53:29.607 に答える