1

「string1」という名前の文字列があります。

string1 = "Mr. Jorge Alexa Narvaez is a former Canadian cricketer and a politician.";

また、「string2」という名前の別の文字列があります。これは、スペースで区切られた「 」タグで囲まれた文字列のみです。<NOUN> and </NOUN>

string2 = "<NOUN>Jorge Alexa Narvaez</NOUN> <NOUN>Canadian</NOUN>";

2番目の文字列には、任意の名詞タグ付き単語を含めることができることに注意してください(「string1」に基づいて、たとえば、string1に3つの名詞がある場合、string2には同じ3つの名詞が名詞タグで囲まれます)
「string1」にタグを追加し、次のようにstring1を作成し、

string1 = "Mr. <NOUN>Jorge Alexa Narvaez</NOUN> is a former <NOUN>Canadian</NOUN> cricketer and a politician.";

単純に、「Jorge Alexa Narvaez」と「Canadian」を次のように置き換えたいだけです。<NOUN>Jorge Alexa Narvaez</NOUN> and <NOUN>Canadian</NOUN>

誰でもこれを行う方法を教えてもらえますか?

4

4 に答える 4

1

それは次のように行うことができます、

 Pattern p = Pattern.compile("<NOUN>(.*?)</NOUN>");
    Matcher m = p.matcher(string2);
    while(m.find()) {
        string1= string1.replaceAll(m.group(1),m.group(0));
    }
于 2012-08-18T04:43:54.330 に答える
0

そのc#で...あなたがそれを適切にjavaに変換することを願っています

string s="<NOUN>Jorge Alexa Narvaez</NOUN> <NOUN>Canadian</NOUN>";
string s1="Mr. Jorge Alexa Narvaez is a former Canadian cricketer and a politician.";

foreach(Match m in Regex.Matches(s,@"(?<=<NOUN>).*?(?=</NOUN>)"))
s1=Regex.Replace(s1,m.Value,"<NOUN>$0<NOUN>");
于 2012-08-18T04:42:27.873 に答える
0

次のコードを試してみましたが、うまくいきました。String クラスの代わりに Stringbuffer を使用して最適化できます。

import java.util.StringTokenizer;


public class StringManipulation {

    String temp = "<NOUN>Nitin<NOUN> <NOUN>test<NOUN>";
    String finalString ="HeI am Nitin and I want to test seomthing";


    public void doIt(){

        StringTokenizer x = new StringTokenizer(temp, " ");
        while (x.hasMoreTokens()){

            String token = x.nextToken();

            String findword = token.replaceAll("<NOUN>", "");
            String findword1 = findword.replaceAll("</NOUN>", "");

            String modifiedString = finalString.replaceFirst(findword1, "<NOUN>"+findword1+"</NOUN>");
            this.finalString = modifiedString;

    }
        System.out.println(finalString);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {

        new StringManipulation().doIt();

    }

}
于 2012-08-18T04:53:46.177 に答える
0

いくつかの質問:

  1. string2 は、ハンドルを持っていないライブラリによって生成されていますか?
  2. string2 には、「<NOUN>」タグまたはその他のタグのみが含まれますか?

タグのみが含まれている場合、それを行う大雑把な方法は次のとおりです。

  1. string2 を (<NOUN>|</NOUN>) で分割します。結果は、string1 の名詞 (および空のスペース) を含む配列です。
  2. 配列を繰り返し処理し、空の文字列を無視して、string1 の空でない文字列を "" と "" の間に埋め込まれた名詞に置き換えます。

これを行うサンプル コード:

{
    String string1 = "Mr. Jorge Alexa Narvaez is a former Canadian cricketer and a politician.";
    String string2 = "<NOUN>Jorge Alexa Narvaez</NOUN> <NOUN>Canadian</NOUN>";
    String[] list = string2.split("(<NOUN>|</NOUN>)");
    for (String str : list)
    {
        if (str.trim().isEmpty())
        {
            continue;
        }
        string1 = string1.replace(str, "<NOUN>" + str + "</NOUN>");
    }
    System.out.println(string1);
}

string2 の生成方法に関する詳細があれば、これを行うためのはるかに優れた組織的な方法があります。

于 2012-08-18T04:37:14.163 に答える