我不知道我做错了什么。我是在最后忘记了什么还是我错过了什么。
我要完成的工作是用户输入一个字符串,例如:aaabbcccc
,然后输出:a3bbc4
,因此任何包含3个或更多字符的字符都应显示字母,然后输入该字符的次数字符串。
我是在弄乱我看不见的地方还是在即将结束时给我输出结果?
TL; DR字符串输入:aaabbcccc
输出:a3bbc4
。让用户输入然后在尝试提供输出时给出错误。
跑:
Enter a string(only lowercase): aaabb
Exception in thread "main" java.lang.NullPointerException
at hw9.RunLengthCode.compress(Hw9.java:26)
at hw9.RunLengthCode.getCText(Hw9.java:20)
at hw9.Hw9.main(Hw9.java:55)
C:\Users\extrapcuser\AppData\Local\NetBeans\Cache\8.1\executor-
snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 5 seconds)
码:
import java.util.Scanner;
class RunLengthCode
{
String str1;
String cText;
String pText;
public String setPText(String str)
{
pText = str.toLowerCase();
return pText;
}
public String getCText()
{
compress(cText);
return cText;
}
public void compress(String str)
{
int count = 1;
for(int i = 1; i < str1.length(); i++)
{
if(str1.charAt(i) == str1.charAt(i-1))
{
count++;
}
else if(count >= 3)
{
String stra = str.substring(0, i-count);
String strb = str.substring(i-count+1, i-count+2);
String strc = str.substring(i);
str = stra + strb + count + strc;
count = 1;
i=1;
}
}
if(count >= 3)
{
str = str.substring(0, str.length()-count+1);
}
cText = str;
}
}
public class Hw9
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
RunLengthCode rLc = new RunLengthCode();
System.out.print("Enter a string(only lowercase): ");
String pText = in.nextLine();
rLc.setPText(pText);
System.out.println(rLc.getCText());
}
}
最佳答案
我在代码中发现了以下缺陷。NullPointerException
的原因是您没有初始化
字符串str1。并且您正在访问空引用。很明显
抛出NullPointerException
cText变量永远不会初始化。
compress方法逻辑不会给您期望的输出,并且您仅比较相邻字符。
我希望使用HashMap
在String
中查找重复的字符。
import java.util.LinkedHashMap;
导入java.util.Scanner;
公共类DuplicateCharactersInString {
static LinkedHashMap<Character, Integer> charMap = new LinkedHashMap<Character, Integer>();
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a string(only lowercase): ");
String pText = in.nextLine();
pText = pText.toLowerCase();
for (int i = 0; i < pText.length(); i++) {
if (charMap.containsKey(pText.charAt(i))) {
charMap.put(pText.charAt(i), charMap.get(pText.charAt(i)) + 1);
} else {
charMap.put(pText.charAt(i), 1);
}
}
if (!charMap.isEmpty()) {
StringBuilder builder = new StringBuilder();
for (Character character : charMap.keySet()) {
int value = charMap.get(character);
if (value > 2) {
builder.append(character);
builder.append(value);
} else {
for (int i = 1; i <= value; i++) {
builder.append(character);
}
}
}
System.out.println(builder);
} else {
System.out.println("Please enter the string");
}
}
}
输出:
Enter a string(only lowercase): aaabbbcccccd
a3b3c5d