gpt4 book ai didi

java - 如何计算字符串中字符的重复/连续出现(当我不知道开始/结束索引时)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:30 32 4
gpt4 key购买 nike

所以如果我有 22332,我想用 BEA 替换它,就像在移动键盘中一样。我想看看一个数字出现了多少次,这样我就可以数出 A--2,B--22,C-- 222、D--3、E--33、F--333 等(0 是暂停)。我想编写一个解码器,接收数字字符串并用字母替换数字出现。示例:44335557075557777 将被解码作为帮助PLS。

这是代码的关键部分:

public void printMessages() throws Exception {
File msgFile = new File("messages.txt");

Scanner input = new Scanner(msgFile);

while(input.hasNext()) {
String x = input.next();
String y = input.nextLine();
System.out.println(x+":"+y);
}

它将文件中的输入作为数字字符串。然后扫描仪打印数字。我尝试拆分字符串数字,然后我不知道如何评估问题中提到的那种外观。

  for(String x : b.split(""))
System.out.print(x);
gives: 44335557075557777(input from the file).

我不知道如何调用每个重复索引,看看它们如何形成移动键盘中的模式。如果我使用 for 循环,那么我必须循环遍历整个字符串并使用大量 if 语句。一定有其他方法。

最佳答案

另一个使用正则表达式来破坏编码字符串的建议。

通过look-around + back-reference可以很容易的在前后字符不同的位置分割字符串。

例如

String line = "44335557075557777";
String[] tokens = line.split("(?<=(.))(?!\\1)");
// tokens will contain ["44", "33", "555", "7", "0", "7", "555", "7777"]

然后通过 Map 或什至天真地通过一堆 if-else 将每个字符串映射到其对应的字符应该是微不足道的


编辑:正则表达式的一些背景

(?<=(.))(?!\1)

(?<= ) : Look behind group, which means finding
something (a zero-length patternin this example)
preceded by this group of pattern
( ) : capture group #1
. : any char
: zero-length pattern between look behind and look
ahead group
(?! ) : Negative look ahead group, which means finding
a pattern (zero-length in this example) NOT followed
by this group of pattern
\1 : back-reference, whatever matched by
capture group #1

也就是说,找到任意长度为零的位置,并且该位置前后的字符不同,并使用该位置进行拆分。

关于java - 如何计算字符串中字符的重复/连续出现(当我不知道开始/结束索引时)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35712929/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com