Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/142.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 - Fatal编程技术网

Java 如何替换某个字符中除一次以外的所有事件?

Java 如何替换某个字符中除一次以外的所有事件?,java,Java,如果我有一个像telephone这样的字符串,并希望输出返回为tel*phon*,我该怎么做 程序将打印出字符串中的每个字母。如果这是那封信第一次出现,我会写的。但如果它再次出现,我会打印一个星号 hello将是hel*o 再见将是go*dbye 协调将是协调*** 请帮忙,谢谢!这不是家庭作业。。。这是期末考试的练习!谢谢 我正在尝试这样的事情。。。但我不知道该怎么走得更远。。。请帮忙 import java.util.Scanner; public class firstOccurrence

如果我有一个像
telephone
这样的字符串,并希望输出返回为
tel*phon*
,我该怎么做

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

hello
将是
hel*o

再见
将是
go*dbye

协调
将是
协调***

请帮忙,谢谢!这不是家庭作业。。。这是期末考试的练习!谢谢

我正在尝试这样的事情。。。但我不知道该怎么走得更远。。。请帮忙

import java.util.Scanner;
public class firstOccurrence{ 
   public static void main(String[] args){
      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("*");
      }
   }
}
import java.util.Scanner;
公共类第一次出现{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
字符串s;
int i,j,计数;
System.out.print(“输入字符串:”);
s=键盘.nextLine();
对于(i=0;i
我该如何编辑这个精确的代码使其工作?请帮助:(

扫描仪键盘=新扫描仪(System.in);
字符串s;
System.out.print(“输入字符串:”);
s=键盘.nextLine();
Set-occure=new-HashSet();
StringBuilder stb=新的StringBuilder();

对于(int i=0;i中给出了解决此问题的简单方法。它迭代输入字符串的每个字符,并建立到目前为止看到的一组字符,使用当前字符建立输出
StringBuilder
,如果已经看到当前字符,则替换当前字符

这个问题似乎应该适用于Java 8流处理。有一个新函数
String.chars()
,它将
字符串
转换为
字符
流。(但是没有
CharStream
,因此每个
char
都表示为
int
,流类型为
IntStream

为此,我们需要编写一个映射器函数,该函数可以用替换字符替换字符,但前提是该字符已经被看到。因此,我们需要一个有状态的映射器函数,这有点不同寻常。不过,使用高阶函数编写映射器函数并不太困难:

public static IntUnaryOperator replaceIfSeen(int replacement) {
    Map<Integer,Boolean> seen = new ConcurrentHashMap<>();
    return i -> seen.putIfAbsent(i, Boolean.TRUE) == null ? i : replacement;
}
我们获取输入字符串并将其转换为字符流(表示为
int
)并在其上调用我们的条件映射器函数,要求它用
*
字符替换重复项。
mapToObj
操作有点麻烦,因为我们需要将
int
char
部分转换为一个字符串。然后我们收集并将这些字符串连接到输出中。结果与OP预期的一样


请注意,如果流并行运行,其行为会有所不同。在某种程度上,它仍然可以工作,因为任何给定的字符只出现一次,而所有其他字符都被替换为
*
。区别在于,未替换的字符可能不是第一个。例如,给定输入字符串
协调
结果可能是
c**rd*natio*

这里有一个regex方法来解决这个问题,它可以不使用任何外部容器来跟踪替换:

String s = "coordination";
while(s.matches(".*?(\\w)(?=.*?\\1).*")) {
    s = s.replaceAll("(?<=(\\w))((?:(?!\\1).)*)\\1", "$2*");
}
System.out.println( s );
//=> co*rdinat***
String s=“协调”;
while(s.matches(“.*?(\\w)(?=.*?\\1)。*”){

s=s.replaceAll(“(?学习正则表达式的时间到了!对于每个字符,请检查它是否包含在
列表中
。如果不包含,请打印它,将其添加到列表中。如果是,则打印输出“*”。@我们的老师没有教我们正则表达式。基本上,我们应该能够在没有任何正则表达式的情况下完成此程序。请给出一个输入示例nd输出给定代码,并将代码包装在
main
中,这样我们就可以编译它。顺便说一句,@blurfus的提示是一个很好的提示。你的方法看起来不错,除了第二个
for
,并且你打印字符的
if
语句位于错误的位置。例如,如果
i=5
例如,对于(j=…)
循环,您希望在
中查看哪些字符?
static String replace(String input) {
    return input.chars()
        .map(replaceIfSeen('*'))
        .mapToObj(i -> String.valueOf((char)i))
        .collect(joining());
}
String s = "coordination";
while(s.matches(".*?(\\w)(?=.*?\\1).*")) {
    s = s.replaceAll("(?<=(\\w))((?:(?!\\1).)*)\\1", "$2*");
}
System.out.println( s );
//=> co*rdinat***