3 回答
TA贡献1942条经验 获得超3个赞
第一步,创建一个变量来累加String结果;我会用一个StringBuilder. 第二步,String一次一个字符地迭代输入。第三步,将该字符转换为小写。第四步,检查该字符是否不是数字。第五步,如果字符是数字,则将其直接传递,否则该值很容易确定,因为 Java 字符是整数类型(例如 'a' + 1 = 'b' 和 'b' - 1 = 'a')。第六步,将结果作为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();
}
但是,如果您确实愿意,您确实可以使用Nashorn从 Java 直接调用 JavaScript 函数。喜欢,
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();
}
为了同样的结果。
TA贡献1784条经验 获得超8个赞
一种方法是使用 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贡献1831条经验 获得超9个赞
解决步骤可以是
用值 1 到 26填充
int[]
大小为 26(字母表数)的值,对应于字母表中字母的位置。遍历输入字符串的所有字符并将其位置从 附加
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
添加回答
举报