在 Java 中计算字符串的 1 和 0,并将它们按顺序排列?
Posted
技术标签:
【中文标题】在 Java 中计算字符串的 1 和 0,并将它们按顺序排列?【英文标题】:Counting the Ones and Zeros of an String in Java, and putting them in order? 【发布时间】:2021-12-27 23:33:57 【问题描述】:我确实有一个很大的问题,编码应该很容易:
我需要创建一个静态公共方法,该方法返回一个字符串,并以字符串的形式获取二进制数。
public static String encode(String a)
此方法必须计算连续的零和一。如果数字发生变化,则必须为空白。此外,如果第一个数字不是零,程序只需写一个零作为第一个数字。
Example: 11100110111 => "0 3 2 2 1 3"
Other Examples are:
encode("0") --> "1"
encode("000") --> "3"
encode("11") --> "0 2"
encode("011") --> "1 2"
encode("101") --> "0 1 1 1"
我不知道该怎么做,如果有人能帮忙就太好了! 我将在此处发布我毫无价值的代码,它无用但最终包含一些有用的信息!
public class Functionality
public static void main(String[] args)
System.out.println(encode("111"));
public static String encode(String a)
int z = 0;
int v = 0;
String erg = "";
while (a.length() == 0)
while (v == ErsterWert(a))
z = z + 1;
subt(a);
String zx = String.valueOf(z);
erg = erg + zx + " ";
if (v == 0)
v = v + 1;
if (v == 1)
v = 0;
z = 0;
String bg = "sds";
return erg;
public static int ErsterWert(String a)
int f = a.charAt(0);
return f;
public static String subt(String a)
a = a.substring(1);
return a;
【问题讨论】:
我确定还有其他问题,但首先,String
在 Java 中是不可变类型,所以subt(a);
不会改变a
的值。你需要做类似a = subt(a);
的事情。
我建议您阅读循环的工作原理。 IE。 while (a.length() == 0) 和 while (v == ErsterWert(a)) 将是无限循环,因为检查的条件永远不会改变。例如,您可以使用 charAt(int index) 方法遍历每个字符,并将其与当前值(1 或 0)进行比较。如果字符对应于当前值 - 增加计数器。一旦字符与当前值不同 - 将计数器值添加到字符串并重置计数器。
【参考方案1】:
这里有一句话可以打动你的教授:
public static String encode(String a)
return (a.startsWith("1") ? "0 " : "") +
Arrays.stream(a.split("(?<=(.))(?!\\1)"))
.map(String::length)
.map(String::valueOf)
.collect(Collectors.joining(" "));
这将字符串拆分为不同的字符,方法是使用后向来捕获前一个字符,并使用负前瞻来向后引用捕获的字符。
将这些子字符串转换为它们的长度,然后将长度转换为字符串,最后连接到一个由空格分隔的字符串。
第一个字符为1
的特殊情况通过ternary 处理。
【讨论】:
【参考方案2】:使用字符串函数indexOf
和substring
的递归解决方案可能如下所示:
public static String encode(String str)
if (str.startsWith("1"))
// append 0 at start, look for 0 after 1's
return "0 " + encode(str, 0);
// string starts with 0, look for the first 1 after 0's
return encode(str, 1);
// d - the digit to look for after current prefix
public static String encode(String z, int d)
int pos = z.indexOf(String.valueOf(d));
if (pos == -1) // nothing found after current prefix
return String.valueOf(z.length());
// append prefix length and toggle the number to look for
return String.valueOf(pos) + " " + encode(z.substring(pos), 1 - d);
测试:
for (String s : Arrays.asList("0", "1", "000", "11", "011", "101", "0011100001111100"))
System.out.println(s + " -> " + encode(s));
输出:
0 -> 1
1 -> 0 1
000 -> 3
11 -> 0 2
011 -> 1 2
101 -> 0 1 1 1
0011100001111100 -> 2 3 4 5 2
【讨论】:
以上是关于在 Java 中计算字符串的 1 和 0,并将它们按顺序排列?的主要内容,如果未能解决你的问题,请参考以下文章
charAt() 方法如何从字符串中获取数字并将它们放入 Java 中的新字符串中?
如何从输入字符串中分离整数并将它们转换为 int 类型以允许对它们进行计算