亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將字符串中的字母編碼為數字

如何將字符串中的字母編碼為數字

烙印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 關注
  • 249 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號