Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何计算字符串中字符的重复/连续外观(当我不知道开始/结束的索引时)?_Java_String - Fatal编程技术网

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

Java 如何计算字符串中字符的重复/连续外观(当我不知道开始/结束的索引时)?,java,string,Java,String,所以如果我有22332,我想用它来代替BEA,就像在移动键盘上一样。我想看看一个数字出现了多少次,这样我就可以计算a--2,B--22,C--222,D--3,E--33,F--333,等等(0是暂停)。我想写一个解码器,接收数字字符串,并用字母替换数字。示例:4433555707557777将作为帮助进行解码 这是代码的关键部分: public void printMessages() throws Exception { File msgFile = new File("messages.

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

这是代码的关键部分:

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引用,可以很容易地在前后字符不同的位置拆分字符串

e、 g


这意味着,找到任何零长度位置,对于这些位置前后的字符不同,并使用这些位置进行拆分。

您尝试过哪些代码?此外,你还可以解释一下你的逻辑。你怎么知道22是B而不是AA?把你写的代码贴出来。StackOverflow不提供编码服务。您如何识别22是B而不是AA?您的输入可能包含一些暂停符号,如
-
,或您选择的任何符号。61075865533:44335557075577774848675309:533666990440466680466680444486804486107584096:944666027773309966688777223377807780883 336687777(数字串,我将使用解码器方法对其进行解码)
22233
拼写
ABE
BAE
CE
AAAE
ABDD
BADD
CDD
,或者
AAADD
?那太简单了!非常感谢。但是你能解释一下“(?@JecobSolomon)这个解决方案是如何工作的吗?为了你自己的学习经验,如果你能通过使用循环和
String.charAt(pos)
等实现一个给出类似结果的util函数,那么你会更好,这样你就可以自己手动将字符串分解成碎片。
String line = "44335557075557777";
String[] tokens = line.split("(?<=(.))(?!\\1)");
// tokens will contain ["44", "33", "555", "7", "0", "7", "555", "7777"]