1

对于一个类,我必须使用二叉树制作一个莫尔斯电码程序。假设用户输入莫尔斯电码,程序将对其进行解码并打印出结果。二叉树只包含 AZ。我只需要阅读破折号、圆点和空格。如果有一个空格是字母的结尾。如果一行中有 2 个或更多空格,则为单词的结尾。

你如何检测字符串输入是否有连续的空格?现在我已经将它编程在它检测是否有 2 个(然后将打印出一个空格)的位置,但我不知道如何在它知道有 3 个以上空格的地方使用它。

这就是我阅读输入的方式:

String input =  showInputDialog( "Enter Code", null);
character = input.charAt(i);

这就是我让它检测空间的方式: if (character == ' ').

任何人都可以帮忙吗?

4

4 回答 4

1

请注意,我假设您一次检索完整的莫尔斯电码消息,而不是一次检索一个字符

重点关注这一点:“如果有一个空格是字母的结尾。如果连续有2个或更多的空格是单词的结尾。”

就个人而言,我会split()在 String 类上使用该方法。这会将一个字符串拆分为一个字符串 [],然后您可以对数组中的各个字符串进行一些检查。像这样拆分空格字符会给您带来一些行为优势:

  1. 任何表示字符的字符串都没有尾随或前导空格
  2. 任何多个空格的序列都会在返回的 String[] 中产生空字符串。

例如,在字符串 "AB C" 上调用 split(" ") 会给你一个包含 {"A", "B", "", "C"} 的 String[]

使用这个,我会首先检查空字符串是否出现。如果是这种情况,则意味着在输入的摩尔斯电码消息中至少有 2 个相邻的空格字符。然后你可以忽略第一个之后出现的任何空字符串,它将满足任意数量的连续空字符串。

不想为您完成作业,这里有一些示例代码:

public String decode(final String morseCode) {
    final StringBuilder decodedMessage = new StringBuilder();

    final String[] splitMorseCode = morseCode.split(" ");

    for (final String morseCharacter : splitMorseCode) {
        if( "".equals(morseCharacter) ) {
            /* We now know we had at least 2 spaces in sequence
             * So we check to see if we already added a space to spearate the 
             * resulting decoded words. If not, then we add one. */
            if ( !decodedMessage.toString().endsWith(" ") ) {
                decodedMessage.append(" ");
            }
            continue;
        }

        //Some code that decodes your morse code character.
    }

    return decodedMessage.toString();
}

我还写了一个快速测试。在我的示例中,我将“--”转换为“M”。在空格字符上拆分 decodedMessage 是一种计算已解码单个单词的方法。

@Test
public void thatDecoderCanDecodeMultipleWordsSeparatedByMultipleSpaces() {
    final String decodedMessage = this.decoder.decode("-- --  -- --   -- --    -- --     -- --       -- --        -- --");

    assertThat(decodedMessage.split(" ").length, is(7));
    assertThat(decodedMessage, is("MM MM MM MM MM MM MM"));
}

当然,如果这仍然没有意义,那么阅读API总是有帮助的

于 2013-10-31T17:47:29.730 回答
1

好吧,你可以做这样的事情,如果你在结果数组中有多个项目会告诉你你至少有一个 2+ 空格的实例。

    String[] foo = "a b  c   d".split("  +");

这分为“a b”、“c”和“d”。

您可能需要正则表达式检查,但如果您需要检测每个空格计数有多少(例如,有多少 2 个空格,有多少 3 个空格等)。

于 2013-10-31T16:24:02.130 回答
0

检测一个字符串是否有多个空格:

if (str.matches(".*  .*"))
于 2013-10-31T19:17:13.300 回答
0

这会有所帮助。,

public class StringTester {
    public static void main(String args[]){
        String s="Hello  ";
        int count=0;
        char chr[]= s.toCharArray();
       for (char chr1:chr){
           if(chr1==' ')
                  count++;
       }
        if(count>=2)
            System.out.println(" I got more than 2 spaces")   ;
    }
于 2013-10-31T19:28:27.317 回答