我已经编写了代码来从字符串中打印出第一个非重复字符,一切正常。但是在打印它的字符时它给出了null.Example from Sting input =" ttaasjji kkk eee"然后它应该打印'作为第一个不重复的字符。以下是我的java代码。
public static void main(String[] args) {
LinkedHashMap hm = new LinkedHashMap();
//HashMap hm=new HashMap();
String input = "ttaasjjikkk eee ";
input = input.trim();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
Integer val = (Integer) hm.get(c);
if (c != ' ') {//to exclude space count
if (val != null) {
hm.put(c, val + 1);
} else {
hm.put(c, 1);
}
}
}
System.out.println(hm);//each char count
Iterator itr = (Iterator) hm.keySet().iterator();
while (itr.hasNext()) {
Object temp = hm.get(itr.next());
String sTemp = temp.toString();
int value = Integer.parseInt(sTemp);
if (value == 1) {
System.out.println("First non repeated character is: " + hm.get(temp) + "," + temp);
return;
}
}
}
请帮助我,我们将不胜感激。
答案 0 :(得分:2)
你正在打印错误的东西。您应该打印值为1的第一个键(字符)。
而是打印hm.get(temp)
,这是空的,因为temp
是Integer
,而您的地图没有Integer
个键。
应该是:
while (itr.hasNext()) {
Character key = (Character) itr.next();
Object temp = hm.get(key);
String sTemp = temp.toString();
int value = Integer.parseInt(sTemp);
if (value == 1) {
System.out.println("First non repeated character is: " + key + "," + temp);
return;
}
}
我建议您使用参数化类型,以避免这种混淆。而不是原始LinkedHashMap
,请使用LinkedHashMap<Character,Integer>
。
输出:
{t=2, a=2, s=1, j=2, i=1, k=3, e=3}
First non repeated character is: s,1
答案 1 :(得分:1)
您正在使用地图的键集。您需要条目集,以便检查每个条目的值。这就是存储计数的原因 - 无需将字符串解析为整数。
您还应修复所有代码以使用泛型,以避免所有转换:
import java.util.*;
class Test {
public static void main(String[] args) {
// Key type is Character, value type is Integer
Map<Character, Integer> map = new LinkedHashMap<>();
String input = "ttaasjjikkk eee ";
input = input.trim();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
Integer val = map.get(c);
if (c != ' ') {
if (val != null) {
map.put(c, val + 1);
} else {
map.put(c, 1);
}
}
}
System.out.println(map);
// Enhanced for loop to make it easier to iterate
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
System.out.println("First non repeated character is: "
+ entry.getKey());
return;
}
}
}
}