如何找出某个字符是字符串中的第一个,第二个还是第三个?

时间:2014-08-05 22:26:25

标签: java

如果我有像#34;电话"并希望输出以tel * phon *的形式返回,我该怎么做?

程序会打印出字符串中的每个字母。如果这封信第一次出现,那我就写了。但如果再次出现,我会打印一个星号。

你好,是hel * o

<再>再见

协调将是co * rdinat ***(哎呀你是对的)

请帮助谢谢!这不是功课......这是最后的实践!谢谢!

我尝试了类似的事情...但我只是不知道如何进一步......请帮助

Scanner keyboard = new Scanner(System.in);
String s;
int i, j, count;
System.out.print("Enter string: ");
s = keyboard.nextLine();



for(i=0; i < s.length(); i++){
   count = 0;
   for(j=i+1; i < s.length(); j++){
        if(s.charAt(i) == s.charAt(j)){
           count++;
        }
        if(count < 1)
           System.out.print(s.charAt(i));
        else
           System.out.print("*");
   }
}

有些人告诉我发布我的代码,所以我现在做了。如何编辑这些确切的代码才能使其正常工作?请帮忙:(

2 个答案:

答案 0 :(得分:4)

这是一种方便的方法。 Setadd()上有一个布尔属性,如果该值已插入集合中,则返回false。

方法:创建一个数据结构,以便保证只插入唯一值。如果在其中插入了唯一值,那么可以继续构建返回字符串。如果没有,那么你需要生成星号。

参考下面的代码。为了保证对大写字母和小写字符进行无偏见的处理,请在toLowerCase()之前致电.toCharArray()

public static String filterChars(final String word) {
    final Set<Character> set = new HashSet<>();

    final StringBuilder builder = new StringBuilder();
    for(Character c : word.toCharArray()) {
        if(set.add(c)) {
            builder.append(c);
        } else {
            builder.append('*');
        }
    }
    return builder.toString();
}

答案 1 :(得分:0)

Set<Character> seen = new HashSet<Character>();
String result = "";
for (char ch : input.toCharArray())
{
    if (seen.contains(ch))
        result += "*";
    else
    {
        result += ch;
        seen.add(ch);
    }
}

input是输入字符串,result是输出字符串。

基本上,这会遍历输入字符串中的每个字符,并根据字符是否已被显示,将相应的字符附加到结果字符串。