我正在努力使用一種沒有通過測驗的方法。我正在做類似凱撒密碼的事情,我不知道是正則運算式(我不這么認為)還是其他任何問題。
這是代碼:
public String code(String text, int distance){
if (distance <0){
return null;
}
StringBuilder result = new StringBuilder();
for (char character : text.toCharArray()) {
Pattern pat = Pattern.compile ("^[a-zA-Z\\.]$");
Matcher mat = pat.matcher(text);
if (mat.matches()) {
character = Character.toLowerCase(character);
int originalAlphabetPosition = character - 'a';
int newAlphabetPosition = (originalAlphabetPosition distance) % 26;
char newCharacter = (char) ('a' newAlphabetPosition);
result.append(newCharacter);
} else {
result.append(character);
}
}
return result.toString();
}
這是測驗
assertEquals("bgig.fuurumoiu", pac2Ex4.code("vaca.zoologico", 6));
這是錯誤
Expected :bgig.fuurumoiu
Actual :vaca.zoologico
完成的其他測驗
void testCode() {
assertEquals("b", pac2Ex4.code("a", 1));
assertEquals("d", pac2Ex4.code("a", 3));
assertEquals("-", pac2Ex4.code("-", 3));
assertEquals("z", pac2Ex4.code("x", 2));
assertEquals("a", pac2Ex4.code("x", 3));
assertEquals("b", pac2Ex4.code("a", 27));
assertEquals("d", pac2Ex4.code("a", 29));
assertEquals("x", pac2Ex4.code("x", 26));
assertEquals("x", pac2Ex4.code("x", 0));
assertNull( pac2Ex4.code("x", -1));
assertEquals("bgig.fuurumoiu", pac2Ex4.code("vaca.zoologico", 6));
assertEquals("bgig.fuurumoiu", pac2Ex4.code("vaca.zoologico", 32));
assertEquals("afhf ettqtlnht", pac2Ex4.code("vaca zoologico", 31));
assertEquals("wdap bjcsd! 2020", pac2Ex4.code("hola mundo! 2020", 15));
assertEquals("wdap bjcsd! 2020", pac2Ex4.code("hola mundo! 2020", 41));
assertEquals("wdap bjcsd! 2020", pac2Ex4.code("hola mundo! 2020", 67));
}
我哪里做錯了?一定是條件不好,這一定是由正則運算式引起的。但是,我找不到錯誤。我在https://regex101.com/ 中測驗了我的正則運算式并且它有效。
先感謝您!
uj5u.com熱心網友回復:
您的正則運算式在 regex101 中不起作用
嘗試 \w*\.\w*
但是您的邏輯仍然會導致bgigNfuurumoiu,因此更改為
if (distance <0){
return null;
}
Pattern pat = Pattern.compile ("\\w*\\.\\w*");
Matcher mat = pat.matcher(text);
if (!mat.matches()) {
System.out.println("No Match");
return text;
}
StringBuilder result = new StringBuilder();
for (char character : text.toCharArray()) {
if (character == '.') {
result.append(character);
continue;
}
character = Character.toLowerCase(character);
int originalAlphabetPosition = character - 'a';
int newAlphabetPosition = (originalAlphabetPosition distance) % 26;
char newCharacter = (char) ('a' newAlphabetPosition);
result.append(newCharacter);
}
return result.toString();
編輯
取消正則運算式
if (distance <0){
return null;
}
StringBuilder result = new StringBuilder();
for (char character : text.toCharArray()) {
if (!Character.isAlphabetic(character)) {
result.append(character);
continue;
}
character = Character.toLowerCase(character);
int originalAlphabetPosition = character - 'a';
int newAlphabetPosition = (originalAlphabetPosition distance) % 26;
char newCharacter = (char) ('a' newAlphabetPosition);
result.append(newCharacter);
}
return result.toString();
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/310965.html
標籤:爪哇
下一篇:如何在表格的頂部添加水平滾動條?
