解析 java/android 中的离散多位整数列表

parsing a list of discrete multidigit integers in java/android

我在 Android 中有代码以 {ABCD EFGH IJKL ...} 的一般形式生成坐标输出。坐标组仅由单个 space 分隔。

我需要访问每个坐标组的最后 2 位数字并将 "s" 附加到每个新创建的 2 位坐标子组的开头。所以如果我有 {1234 5678} 我希望我的解析结果是 "s34" "s78".

我正在考虑执行此操作的最佳方法。有什么建议吗?

编写伪代码。设计数据结构。将伪代码转换为工作代码。也许是这样的:

Scan the string forward 2 characters.
Write 's'.
Write the next 2 characters.
Write a separator (space or newline).
Scan over space.
Repeat loop.

您将必须使用条件来处理开始或至少停止,因为它们与循环的所有其他迭代不太一样。

有多种方法可以完成此操作,这是一种方法:

public class TestRunner {

    public static void main(String[] args) {

        String sourceString = "{ABCD EFGH IJKL}";
        // Remove brackets...
        String bracketRemoved = sourceString.replaceAll("\{", "").replaceAll("\}", "");

        System.out.println("Removed brackets " + bracketRemoved);

        // split by space
        String[] chunks = bracketRemoved.split(" ");

        for (String s : chunks) {
            System.out.println("Processing " + s);

            // substring the last 2 characters of a 4 length String
            System.out.println("s" + s.substring(2, 4));
        }
    }

}

首先,我使用正则表达式去除括号,这是一种快速而肮脏的解决方案。 接下来拆分为 space... 然后对于每个 String I 从 2-4 子串并打印前缀 s.

输出是

Removed brackets ABCD EFGH IJKL
Processing ABCD
sCD
Processing EFGH
sGH
Processing IJKL
sKL

请注意,这是非常基本的,只涵盖了一条快乐的道路。如果 s 小于 4,您需要保护自己免受抛出的异常!但你可以做到:)