0

プログラムが非構造化テキストから名前を取得した後、プログラムによって付けられた名前を取得し、「FirstMI.Last」または「Last、FirstMI」のいずれかのユーザー指定の形式で表示しようとしています。何か案は?これまでのところ、文字列にコンマが含まれているかどうかを確認しています。その場合は、文字列内の単語の順序を切り替えてカンマを削除します。ミドルネームのイニシャルがあり、その後にピリオドが含まれていない場合は、1つ追加します。

if (entity instanceof Entity) {
    // if so, cast it to a variable
    Entity ent = (Entity) entity;

    SName name = ent.getName();
    String nameStr = name.getString();
    String newName = "";

    // Now you have the name to mess with
    // NOW, this is where i need help
    if (choiceStr.equals("First MI. Last")) {
        String formattedName = WordUtils
                .capitalizeFully(nameStr);
        for (int i = 0; i < formattedName.length(); i++) {

            if (formattedName.charAt(i) != ',') {
                newName += formattedName.charAt(i);
            }
        }
    }
    name.setString(newName);
    network.updateConcept(ent);
4

2 に答える 2

3

正規表現を使用し、次のようにしString.replaceAllます。

"Obama, Barack H.".replace("(\\w+), (\\w+) (\\w\\.)", "$2 $3 $1")

結果はBarack H. Obamaです。

于 2012-05-11T01:34:41.517 に答える
2

これは で簡単になりsubstringます。これは、形式が有効であることを前提としています (確認する必要があります)。

//Separate the names
String newName;
String lastName = name.substring(0, name.indexOf(","));
String firstName = name.substring(name.indexOf(",")+1);

//Check for a space indicating a middle Name
//Check to see if the middle name already has the period if not add it
if(firstName.trim().contains(" ") && !firstName.contains(".")) {
   firstName += ".";
}

newName = firstName + " " + lastName;

//Set the name to whatever you're using

名前に含めることが許可されている場合、これは機能しないことに注意してください"," " " or "."

于 2012-05-11T01:29:46.167 に答える