3 回答

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊
第一步,創(chuàng)建一個(gè)變量來累加String結(jié)果;我會(huì)用一個(gè)StringBuilder. 第二步,String一次一個(gè)字符地迭代輸入。第三步,將該字符轉(zhuǎn)換為小寫。第四步,檢查該字符是否不是數(shù)字。第五步,如果字符是數(shù)字,則將其直接傳遞,否則該值很容易確定,因?yàn)?Java 字符是整數(shù)類型(例如 'a' + 1 = 'b' 和 'b' - 1 = 'a')。第六步,將結(jié)果作為String. 最后,Java 命名約定是駝峰命名法(以小寫字母開頭)。喜歡,
public static String encodeNumber(String str) {
StringBuilder result = new StringBuilder();
for (int j = 0; j < str.length(); j++) {
char c = Character.toLowerCase(str.charAt(j));
if (c < 'a' || c > 'z') {
result.append(c);
} else {
result.append(1 + c - 'a');
}
}
return result.toString();
}
但是,如果您確實(shí)愿意,您確實(shí)可以使用Nashorn從 Java 直接調(diào)用 JavaScript 函數(shù)。喜歡,
String f = "function NumberEncoding(str) { str = str.toLowerCase();\n"
+ "var obj = {};\n"
+ "var alpha = \"abcdefghijklmnopqrstuvwxyz\";\n"
+ "var result = \"\";\n"
+ "for (var i = 1; i <= alpha.length; i++) {\n"
+ " obj[alpha[i-1]] = i;\n" + "}\n" + "\n"
+ "for (var j = 0; j < str.length; j++) {\n"
+ " if (str[j].match(/[a-z]/)) {\n"
+ " result += obj[str[j]];\n"
+ " } else {\n" + " result += str[j];" + " }\n" + "}\n"
+ "return result;\n" + "}";
ScriptEngine se = new ScriptEngineManager().getEngineByName("js");
try {
se.eval(f);
Invocable invocable = (Invocable) se;
Object result = invocable.invokeFunction("NumberEncoding", "zabc123");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
為了同樣的結(jié)果。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
一種方法是使用 StringBuilder。
List<String> strings = Arrays.asList("abc123", "e2f3g4");
for (String s : strings) {
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);
if (Character.isAlphabetic(c)) {
sb.replace(i, i + 1, Integer.toString(c - 'a' + 1));
}
}
System.out.println(sb.toString());
}
還有 Stream 版本。
List<String> strings = Arrays.asList("123abc", "e1f2g3", "xyz123");
List<String> converted = strings.stream().map(str -> str.chars().map(
chr -> Character.isAlphabetic(chr) ? chr - 'a' + 1
: chr - '0').mapToObj(String::valueOf).collect(
Collectors.joining())).collect(Collectors.toList());
System.out.println(converted);

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
解決步驟可以是
用值 1 到 26填充
int[]
大小為 26(字母表數(shù))的值,對(duì)應(yīng)于字母表中字母的位置。遍歷輸入字符串的所有字符并將其位置從 附加
int[]
到 aStringBuilder
。如果該字符不是字母表,則按原樣追加。
演示:
public class Main {
public static void main(String[] args) {
System.out.println(numberEncoding("abc123"));// Expected: 123123
}
static String numberEncoding(String str) {
str = str.toLowerCase();
String alpha = "abcdefghijklmnopqrstuvwxyz";
int[] obj = new int[alpha.length()];
StringBuilder result = new StringBuilder();
for (int i = 1; i <= obj.length; i++) {
obj[i - 1] = i;
}
for (int j = 0; j < str.length(); j++) {
if (str.charAt(j) >= 'a' && str.charAt(j) <= 'z') {
result.append(String.valueOf(obj[j]));
} else {
result.append(str.charAt(j));
}
}
return result.toString();
}
}
輸出:
123123
添加回答
舉報(bào)