【问题标题】:Cannot parse characters from string in java无法从java中的字符串解析字符
【发布时间】:2018-09-18 13:41:36
【问题描述】:
import java.util.Scanner;

public class Out {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        String[] arr = new String[n];
        int result = 0;
        for(int i = 0; i < n; i++) {
            arr[i] = input.next();
            System.out.println(arr[i]);
            System.out.println(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")));
            System.out.println(Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1))));
            result += Math.pow(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")), Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1))));


        }
        System.out.println(result);

    }

}

这段代码应该得到一个字符串(例如 567)并将 56 提高到 7 的幂。它仅适用于我有 212 的情况。我知道使用 arr[i]/10 很容易和 arr[i]%10。但我无法理解这里的行为。我想知道为什么这个解决方案不起作用。谢谢!

【问题讨论】:

  • 我至少会简化代码。像Math.pow(Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")), Double.parseDouble(Character.toString(arr[i].charAt(arr[i].length() - 1)))) 这样的行非常难以阅读。程序应该首先被人类理解,其次是计算机。
  • 不替换字符,而是尝试从 0 n-1 获取子字符串,忽略最后一个字符。如果你替换它,第n-1个字符将有“”,第n个字符将有字符串结尾,我猜这会给你带来麻烦。
  • 我不完全确定你在这里问什么。如果您只有三个输入整数m、n 和e(指数),打印Math.pow(10 * n + m, e) 不够吗?
  • @PaulBenn 这里的问题如下: Double.parseDouble(arr[i].replace(Character.toString(arr[i].charAt(arr[i].length() - 1)), "")) 导致输入字符串 212 的结果为 1.0,而预期为 21.0。此外,输入整数的计数基于第一个输入是动态的。以下每个整数值都属于 MN 类型,其中 length(MN) >= 2,length(M) >= 1,length(N) = 1。
  • 请使用移动变量——它会有很大帮助(也看看String.substring 方法——replace 可能不是你想要的)并且它适用于(小)数字没有重复。

标签: java string parsing character charat


【解决方案1】:

String.replace 在这里不起作用。此函数替换字符串中所有出现的字符。

所以对于像 212 这样的数字,"212".replace("2", "") 将得到 "1"。

见https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#replace-char-char-

考虑使用子字符串:

String s = "212"
System.out.println(s.substring(0, s.length() - 1)); //prints 21
System.out.println(s.substring(s.length()-1)); //prints 2

【讨论】:

  • 为了将最后一个字符打印为字符串,可以使用 s.substring(s.length() -1).
  • 是的,这可能更具可读性,根据您的建议编辑了我的答案。
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
相关资源
最近更新 更多