【问题标题】:if a character is a digit between 0 and 8 then increase it by 1 (others characters are unchanged)如果字符是 0 到 8 之间的数字,则将其加 1(其他字符不变)
【发布时间】:2020-10-29 02:49:27
【问题描述】:
public String f2(String string) {
    String result = "";
    String num = "";
    for (int i = 0; i < string.length(); i++) {
            if (Character.isDigit(string.charAt(i))) {
                int number = Integer.parseInt(string.charAt(i) + "");
                if (number > 0 || number < 8) {
                    number += 1;
                    num = String.valueOf(number);
                }
            }
        }
    return result;
}

输入示例:

123abc

预期输出:

234abc

如果是数字,我解决了字符的值增加1个单位,但我没有解决将字符放在一起的问题。

有人可以帮我吗?

【问题讨论】:

  • num += String.valueOf(number) 代替num = String.valueOf(number)然后返回num
  • 不,我不想返回 234abc,而不是 234 ????
  • 对了,如果是if(!Character.isDigit(string.charAt(i))),则执行result += string.charAt(i);,最后在结果前面加上num
  • 如果我输入:1a2b3c => 结果必须是 2a3b4c ????
  • 没错,所以我给你的解决方案是针对简单的情况,对于你提出的情况,你可以从我的开始

标签: java string replace


【解决方案1】:

首先,关于您的解决方案的一般说明 - chars 可以直接与 &lt;&gt; 运算符共同映射,也可以递增,因此您无需进行特定的转换字符到int

关于收集修改后的字符,最简单的方法可能是使用StringBuilder

public static String f2(String string) {
    StringBuilder sb = new StringBuilder(string.length());
    for (int i = 0; i < string.length(); ++i) {
        char ch = string.charAt(i);
        if (ch >= '0' && ch <= '8') {
            ch++;
        }
        sb.append(ch);
    }
    return sb.toString();
}

【讨论】:

  • 成功了,谢谢。但我仍在尝试用我的代码解决它?
【解决方案2】:

您错过了将值附加到result。您需要将递增的数字或字符原样(如果它不在0 - 8 的范围内)附加到result,如下所示:

按如下方式进行:

public class Main {
    public static void main(String[] args) {
        System.out.println(f2("123abc"));

    }

    public static String f2(String string) {
        String result = "";
        String num = "";
        for (int i = 0; i < string.length(); i++) {
            if (Character.isDigit(string.charAt(i))) {
                int number = Integer.parseInt(string.charAt(i) + "");
                if (number > 0 || number < 8) {
                    number += 1;
                    num = String.valueOf(number);
                    result += num;// Add it here
                }
            } else {// Add it here
                result += string.charAt(i);
            }
        }
        return result;
    }
}

输出:

234abc

【讨论】:

    【解决方案3】:

    使用您的代码,我已经找到了解决方案:

    public String f2(String string) {
        StringBuilder result = new StringBuilder(string.length());
        for (int i = 0; i < string.length(); i++) {
            char c = string.charAt(i);
            if (c >= '0' && c <= '8') {
                result.append(++c);
            } else {
                result.append(string.charAt(i));
            }
        }
        return result.toString();
    }
    

    如您所见,我检查是否是有效字符(在您的情况下为 0-8 之间的数字),如果是,我将其后继附加到 result,以防万一我只是简单地将其附加到result。 所以现在它也适用于123abc1e3f4t5z 的情况。

    【讨论】:

      【解决方案4】:

      使用 Java 8(或更高版本),您可以执行以下操作:

      public String f2(String string) {
      
          return string.codePoints()
                  .map(ch -> (ch >= '0' && ch <= '8') ? ch + 1 : ch)
                  .collect(StringBuilder::new,
                           StringBuilder::appendCodePoint,
                           StringBuilder::append)
                  .toString();
      
      }
      

      【讨论】:

        【解决方案5】:

        UTF-8 字符表中从 08 的数字具有从 4856 的十进制代码。 Java 中的每个字符都有自己的十进制代码。 String 类有 old replace 方法,它用另一个字符替换所有出现的单个字符。这里最简单的方法是使用反向循环:

        String string = "abcdefghi.. 0123456789 003";
        String string2 = string;
        
        for (int i = 56; i > 47; i--) {
            string2 = string2.replace((char) i, (char) (i + 1));
        }
        
        System.out.println(string);  // abcdefghi.. 0123456789 003
        System.out.println(string2); // abcdefghi.. 1234567899 114
        

        【讨论】:

          猜你喜欢
          • 2022-11-22
          • 2019-11-22
          • 2018-12-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多