【问题标题】:How to fetch a number from specific position in a string?如何从字符串中的特定位置获取数字?
【发布时间】:2021-07-01 09:25:53
【问题描述】:

我有一个包含 10 000 多个数字的字符串,用空格分隔:

String num = "1  34  16  9  9  9  12  44  1  ...";

我有一个用户单击的按钮,每次单击该按钮都会增加 +1。第一次点击 == 1,第二次点击 == 2,第三次点击 == 3,以此类推。

这告诉我用户执行了多少次点击。

所以我想要的是:每次点击都从字符串返回结果,我想从特定位置/索引的字符串中获取一个数字。如果是第一次点击,我会期望字符串中的第一个数字,如果是第二个,我期望第二个,第三个我期望位置 3 上的数字,依此类推...

例如,如果 '75' 是位置 25,假设用户点击了第 25 次点击,tv 应该显示 75。

TextView tv = findViewById(R.id.result);
Button btn = findViewById(R.id.btn);

btn .setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int i = 0;
            i++;
            String num = "1  34  16  9  9  9  12  44  1  ...";
            //search from string position i and get the number and show on tv
            //< some searching code here > to get result
            tv.setText("Result: " + result);
        }
    });

我有这个“这里有一些搜索代码”,是我想要执行逻辑以从字符串中获取结果的函数的地方,当得到结果时,我想在 tv 上显示>

【问题讨论】:

  • 在空白处拆分字符串并返回索引clickCount - 1 处的值(或i - 1,如果这是您要用于计算点击次数的变量)。此外,在您的方法中,i始终为您每次点击时的1
  • 就像我在第一个声明中所说的那样,我有超过 10000 个号码,为此我将能够处理它

标签: java android string


【解决方案1】:

您应该将数字拆分为一个数组。由于它很大,你应该只做一次,所以在匿名类中使用一个字段。

由于代码需要记住并更新i 的值,所以该变量也需要是匿名类中的一个字段。

btn.setOnClickListener(new View.OnClickListener() {
    private final String num = "1  34  16  9  9  9  12  44  1  ...";
    private final String[] numbers = num.trim().split("\\s+");
    private int i = -1;

    @Override
    public void onClick(View v) {
        if (++i == numbers.length)
            i = 0; // Roll over when reaching end of numbers
        tv.setText("Result: " + numbers[i]);
    }
});

【讨论】:

    【解决方案2】:

    首先你要了解的是,i的前一个值不会在用户每次点击时被考虑进去,因为它在onClick()的Body里面> 它总是重新启用

    要纠正这个问题并拆分 空格分隔的字符串,您可以:

    TextView tv = findViewById(R.id.result);
    Button btn = findViewById(R.id.btn);
    
    btn .setOnClickListener(new View.OnClickListener() {
             //move the instantiation outside the OnClick
             int i = 0;
            @Override
            public void onClick(View v) {
               
                String num = "1  34  16  9  9  9  12  44  1  ...";
    
                String[] results = num.split("  ");
                tv.setText("Result: " + results[i]);
                i++;
            }
        });
    

    我还没有测试过,但它应该可以工作

    【讨论】:

    • 永远不会使用在 i++ 处更改的值
    • @Mab 我确实没有复制你的答案,它是完全独立于这个答案而写的。在我发布my answer 之前,我什至没有看到这个答案。 --- 我留下我的答案,因为它有 2 个你的答案没有的功能:1)通过只拆分一次来获得更好的性能。 2)点击按钮次数过多时,滚动而不是杀死程序。
    猜你喜欢
    • 2015-05-17
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-07
    • 2012-07-21
    • 2016-11-11
    相关资源
    最近更新 更多