【问题标题】:Adding synonym words different code numbers - java添加同义词不同的代码数字 - java
【发布时间】:2014-04-30 09:58:10
【问题描述】:

我有这个程序部分,它在所有部分都放置了特定的数字。我想要的是让迭代器继续计算单词,即使单词相同。当同一个词再次出现时,这个最近的代码设置了相同的数字。 例如,它应该大致如下所示:

之前-------->>>>之后

AAAA -------->>>> 001 AAAA

血脑屏障--------->>>> 002血脑屏障

中交----->>>>>> 003中交

血脑屏障 ---------->>>>>> 004血脑屏障

我可以用 if 以某种方式解决它吗?比如上面的例子:

int i=0; if (val[1].equals("BBB"){ i++; if(i==2){sections.put("004","BBB");  //only the second B must be changed at all times, that's why I thought when i=2 then section.put(....) stuff can be used.

`

// List of all Sections, [0]=Code, [1]=Expression

我希望我解释清楚。有什么建议吗?

static final ArrayList<String[]> sections= new ArrayList<String[]>();

static final ArrayList section=new ArrayList();

private static String convert (final String s) { 
    String temp = s;
    //replaces the defined section keywords with a unique section code identifier(3 Bits)
    final Iterator<String[]> sic = sections.iterator();
    while (sic.hasNext()) {
        final String[] val = sic.next();
        temp = temp.replaceAll("\n(" + val[1] + ")\r?\n--*\r?\n",  val[0].length()>0 ? "\n\u25b4\u25ba"+val[0]+"\n$1\n": "\n\n\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
    }
    return (temp + "\u25b4").replaceAll("\u25ba212(\n" + ratioRam +"\u25b4)","\u25ba222$1"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
} 

// 在另一部分,文件部分被读取。 : 读取列表(节) ;

【问题讨论】:

  • 我真的不明白你在做什么。你能更详细地描述你的代码做什么吗?还请解释为什么您当前的代码不能正常工作。
  • CCCC -----------------&gt;&gt;&gt;&gt;&gt;&gt; 003 BBB 是正确的还是错字?不应该是003 CCCC吗?
  • @Teetrinker,对,我编辑了,谢谢,)
  • 我认为,如果您将字符串的频率保留在某些数据结构中而不是作为字符串的一部分,这将更容易和更有效。
  • 如果我理解正确,您希望在文档中添加节号(降价?)或类似的东西,其中可能有重复的节名。也许使用replace 而不是replaceAll

标签: java iterator sections


【解决方案1】:

如果我理解正确,您想将节号添加到文档中,其中可能有重复的节名。您sections 列表似乎包含描述这些部分的数组,第一个元素是部分编号,第二个元素是部分名称。

您可以通过使用节标题和预期的周围标记构造一个正则表达式来做到这一点,然后将其替换为带有相应数字的标题。现在的问题似乎是可以有重复的部分标题,并且使用replaceAll 您可以找到所有这些部分并将相同的编号放入其中。

您可以使用replaceFirst 来替换该节标题的第一次出现,而不是使用replaceAll。当然,这需要对sections 列表进行排序。


这是一个最小的示例(稍微简化,但使用与您的问题相同的正则表达式)。

String text = "bla bla \nsection\n------\nmore text\nanother section"
        + "\n----\ntext again\nsection\n---\nfinal bunch of text";
Map<String, String> sections = new TreeMap<>();
sections.put("001", "section");
sections.put("002", "another section");
sections.put("003", "section");
for (String num : sections.keySet()) {
    String title = sections.get(num);
    text= text.replaceFirst("\n(" + title + ")\r?\n--*\r?\n", "\n\u25b4\u25ba"+ num+"\n$1\n");
}
System.out.println(text);

在输出中,所有部分都正确编号。

【讨论】:

  • 我的代码将定义的部分关键字替换为唯一的部分代码标识符(3 位)。我将它们更改为 replaceFirst 但这次第二个单词前面没有任何代码。 ://
  • 请添加一个最小的可复制示例,例如一个包含三个部分标题的字符串,一个唯一的和两个重复的,以及各自的sections 列表。
  • 你能举个例子吗?我不知道我该怎么做
  • @tolgazinho 我不能给你一个例子来说明你的文本和你的部分的外观,你必须这样做。但是我为我的解决方案做了一个最小的例子,这里一切似乎都很好。
  • 不,托拜厄斯,很遗憾不是。有很多部分有很多代码。我相信,这样做应该会付出很多努力。但是如果它是可实现的,它可以做什么在问题中添加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多