为了账号安全,请及时绑定邮箱和手机立即绑定

如何将字符串中的字母编码为数字

如何将字符串中的字母编码为数字

烙印99 2023-12-13 10:11:18
我想做的是将字符串中的数字根据字母表编码为数字,并保留数字不变。所以“abc123”将是“123123”。在 javascript 中找到了解决方案,但似乎无法适应 java。任何帮助都会很棒,谢谢。java 函数会是这样的import java.util.*; import java.io.*;class Main {  public static String NumberEncoding(String str) {    ***call javascript function or translate it into java  }  public static void main (String[] args) {      // keep this function call here         Scanner s = new Scanner(System.in);    System.out.print(NumberEncoding(s.nextLine()));   }}jasvascript 函数是function NumberEncoding(str) { str = str.toLowerCase();var obj = {};var alpha = "abcdefghijklmnopqrstuvwxyz";var result = "";for (var i = 1; i <= alpha.length; i++) {    obj[alpha[i-1]] = i;}for (var j = 0; j < str.length; j++) {  if (str[j].match(/[a-z]/)) {    result += obj[str[j]];  } else {    result += str[j];   }}return result;}
查看完整描述

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();

}

为了同样的结果。


查看完整回答
反对 回复 2023-12-13
?
青春有我

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);


查看完整回答
反对 回复 2023-12-13
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

解决步骤可以是

  1. 用值 1 到 26填充int[]大小为 26(字母表数)的值,对应于字母表中字母的位置。

  2. 遍历输入字符串的所有字符并将其位置从 附加int[]到 a StringBuilder。如果该字符不是字母表,则按原样追加。

演示:

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


查看完整回答
反对 回复 2023-12-13
  • 3 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信