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>";

请注意,第二个字符串可以有任何名词标记词(基于 '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

几个问题:

  1. string2 是由您无法处理的某个库生成的吗?
  2. string2 将仅包含“<NOUN>”标签或任何其他标签吗?

如果它只包含标签,那么一种粗略的方法是

  1. 在 (<NOUN>|</NOUN>) 上拆分 string2。结果是一个包含来自 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 回答
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

我尝试了以下代码,它工作得很好。您可以使用 Stringbuffer 而不是 String 类对其进行优化。

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 回答