2017-04-06 27 views
2

想用“*”替换字符串中的所有3个字母的单词,例如,如果有人输入“我忘了问”,它会输出“我忘了***”,这就是我所拥有的,不知道该从哪里出发。使用StringTokenizer将3个字母的单词替换为Asteriks?

public static void main (String[] args) 
{ 
    c = new Console(); 


    c.print("Enter a string: "); 
    String phrase; 
    phrase = c.readLine(); 

    StringTokenizer phrase = new StringTokenizer (phrase); 
    while (phrase.hasMoreTokens()) 
    { 
     c.print (phrase.nextToken()); 

    } 



} // main method 
+0

检查单词的'.length()',如果是3打印'***'else print word? – Pshemo

+1

'String phrase = c.readLine()。replaceAll(“\\ D {3}”,“***”);' –

+0

我会把那行放在c.print? – SoloTriesToLearn

回答

0

有趣的问题。我解决了使用Java 8你的问题,我只是增加了一个简单的测试,证明它的工作原理:

import org.junit.Test; 
import static java.util.Arrays.asList; 
import static java.util.stream.Collectors.joining; 
import static org.hamcrest.MatcherAssert.assertThat; 
import static org.hamcrest.core.Is.is; 

public class SoloTriesToLearn { 

    public String wordReplacer(String sentence) { 

     return asList(sentence.split(" ")).stream() 
       .map(word -> word.length() == 3 ? "***" : word + " ") 
       .collect(joining()); 

    } 

    @Test 
    public void shouldReplaceWordsWithAsterisk() { 
     String result = wordReplacer("I forgot to ask"); 
     assertThat(result, is("I forgot to ***")); 
    } 
} 

所以基本上我在做什么先被分割的话,那么我流他们,我做检测的映射如果长度是== 3,然后我返回***。在流的末尾,我通过连接将元素收回到单个字符串。

我希望你觉得这段代码有用,我发现这种操作非常容易实现。

更新 好了,如果你的老师不理解Java8,这里就不担心使用标记生成你想要的调皮方式;

import org.junit.Test; 
import java.util.StringTokenizer; 
import static org.hamcrest.MatcherAssert.assertThat; 
import static org.hamcrest.core.Is.is; 

public class SoloTriesToLearn { 

    public String wordReplacer(String sentence) { 

     StringTokenizer st = new StringTokenizer(sentence); 
     String acumulator = ""; 

      while (st.hasMoreElements()) { 
       String currentWord = (String) st.nextElement(); 
       if(currentWord.length() == 3) { 
        acumulator += "***"; 
       } else { 
        acumulator += currentWord + " "; 
       } 
      } 
     return acumulator; 
    } 

    @Test 
    public void shouldReplaceWordsWithAsterisk() { 
     String result = wordReplacer("I forgot to ask"); 
     assertThat(result, is("I forgot to ***")); 
    } 
} 
+0

感谢您的回应,这是一个在线复选标记类,它应该可以帮助我学习Java,有没有一种方法可以让您知道如何使用标记器来执行此操作? – SoloTriesToLearn

+0

@SoloTriesToLearn好吧,当然。检查更新。我刚刚添加了你使用Tokenizer的代码。 – sfrj

+0

我试着运行该代码,并得到10个错误?如果这有所作为,那么这个班级正在使用“准备编程Java IDE”?如果它会更容易,我可以告诉你我们得到的笔记吗? @sfrj – SoloTriesToLearn

-1
public static void main (String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    System.out.println("Enter a string: "); 
    String phrase; 
    phrase = input.nextLine(); 
    ArrayList<String> sentence = new ArrayList<>(); 

    StringTokenizer tokenizer = new StringTokenizer(phrase); 
    while (tokenizer.hasMoreTokens()) 
    { 
     sentence.add(tokenizer.nextToken()); 
    } 
    for (String word : sentence) 
    { 
     if (word.length() == 3) 
     { 
      word = "***"; 
     } 
     System.out.print(word + " "); 
    } 


} // main method 
0

或者只):

phrase = phrase.replaceAll("\\b[a-zA-Z]{3}\\b", "***"); 
相关问题