java将摩尔斯电码读取器中的空字符串转换为空白
我想写一个莫尔斯电码翻译来迎接挑战。目前,我已经将莫尔斯电码转换成一个字符串数组,并通过一个for
循环来构建消息
我现在得到了HEYnullnullJUDE
,正在研究如何检测莫尔斯电码中充当单词空间的两个空格。但是,当我使用if
语句检测.isEmpty
或.isBlank
或.length() == 0
时,for
循环退出,并返回:
9
this is split = [...., ., -.--, , , .---, ..-, -.., .]
H
H
E
HE
Y
HEY
出于某种原因,一旦它点击Null
,它就退出并返回HEY
,而不是执行nullCount
,我不确定
把我现在得到的{
这是来自这个codewars挑战:https://www.codewars.com/kata/54b724efac3d5402db00065e/train/java
import java.util.Arrays;
public class MorseCodeDecoder {
public static String decode(String morseCode) {
String[] split = morseCode.trim().split(" ");
int length = split.length;
System.out.println(length);
System.out.println("this is split = " + Arrays.toString(split));
MorseCode morseCoder = new MorseCode();
String message = "";
for (int i =0; i < length; i++){
int nullCount = 0;
// this is where the code exits for some reason
if(morseCoder.get(split[i]) == null{
nullCount++;
System.out.println(nullCount);
if (nullCount == 2){
nullCount =0;
message = message + " ";
}
}
// if this is "if"statment is removed i get HEYnullnullJUDE
System.out.println (morseCoder.get(split[i]));
message = message + morseCoder.get(split[i]);
System.out.println(message);
}
return message;
}
}
samble test
import org.junit.Test;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
public class MorseCodeDecoderTest {
@Test
public void testExampleFromDescription() {
assertThat(MorseCodeDecoder.decode(".... . -.-- .--- ..- -.. ."), is("HEY JUDE"));
}
}
# 1 楼答案
你的输入是
".... . -. . - ..- -.. ."
由于调用
trim()
,因此split()
将不会看到前导空格或尾随空格要在
split()
的结果中将3个空间视为单个空间,基本上不希望在3个空间的中间分割。换句话说,你只想在一个非空间后面的空间上分割,或者在一个非空间后面的空间上分割如果使用
split("(?<=[^ ]) | (?=[^ ])")
,则结果为:在这里,摩尔斯电码中的空格真的变成了一个只有一个空格的字符串
我将把剩下的留给您,例如,如何使
morseCoder.get(" ")
返回" "
(或' '
,无论类型如何)更新
评论如下:
morseCoder.get(" ")
返回" "
只是一个如何解决它的例子。或者,只需在调用morseCoder.get(...)
之前检查是否遇到空格,例如