在Java中拆分字符串时,StringTokenizer是否更有效?

阿曼·辛格(Aman Singh)|

我一直在解决SPOJ的反印迹系统问题

首先,我尝试使用String的split方法分割输入字符串,提交后获得TLE

我的代码使用拆分方法

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;


class ABSYS {
    public static void main(String[] args) throws IOException {
        int t;
        String[] numArray = new String[2];
        String[] numArray2 = new String[2];
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        t = Integer.parseInt(reader.readLine());
        while(t > 0) {
            String input = reader.readLine();
            if(input.isEmpty()) {
                continue;
            }
            numArray = input.split("\\s{1}=\\s{1}");
            numArray2 = numArray[0].split("\\s{1}\\+\\s{1}");
            Pattern pattern = Pattern.compile("machula");
            Matcher matcher = pattern.matcher(numArray[1]);
            if(matcher.find()) {
                System.out.println(numArray[0] + " = " + (Integer.parseInt(numArray2[0]) + Integer.parseInt(numArray2[1])));
            }
            else {
                matcher = pattern.matcher(numArray2[0]);
                if(matcher.find()) {
                    System.out.println((Integer.parseInt(numArray[1]) - Integer.parseInt(numArray2[1])) + " + " + numArray2[1] + " = " + numArray[1]);
                }
                else {
                    System.out.println(numArray2[0] + " + " + (Integer.parseInt(numArray[1]) - Integer.parseInt(numArray2[0])) + " = " + numArray[1]);
                }
            }
            t--;
        }
    }
}

经过多次尝试,我失败了,无法使我的代码更省时

然后,今天我阅读StringTokenizer并在代码中使用了它,然后就到了那里(在spoj上)

我的代码使用 StringTokenizer

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.StringTokenizer;


class ABSYS {
    public static void main(String[] args) throws IOException {
        int t, a = 0, b = 0, c = 0, matchula = 0;
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        Pattern pattern = Pattern.compile("^(\\d)+$");
        t = Integer.parseInt(reader.readLine());
        while(t > 0) {
            String input = reader.readLine();
            if(input.isEmpty()) {
                continue;
            }
            StringTokenizer tokenizer = new StringTokenizer(input);
            String token = tokenizer.nextToken();
            if(pattern.matcher(token).matches()) {
                a = Integer.parseInt(token);
            }
            else
                matchula = 1;

            tokenizer.nextToken();
            token = tokenizer.nextToken();
            if(pattern.matcher(token).matches()) {
                System.out.println("b = " + token);
                b = Integer.parseInt(token);
            }
            else
                matchula = 2;

            tokenizer.nextToken();
            token = tokenizer.nextToken();
            if(pattern.matcher(token).matches()) {
                c = Integer.parseInt(token);
            }
            else
                matchula = 3;
            switch(matchula) {
                case 1: System.out.println((c-b) + " + " + b + " = " + c);
                        break;
                case 2: System.out.println(a + " + " + (c-a) + " = " + c);
                        break;
                case 3: System.out.println(a + " + " + b + " = " + (a+b));
                        break;
            }
            t--;
        }
    }
}

在JAVA Docs中,他们不鼓励使用StringTokenizer。

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改用String的split方法或java.util.regex程序包。

Jason S所述,请在此处回答

如果我想用比单个字符更复杂的逻辑来标记字符串(例如,在\ r \ n上分割),则不能使用StringTokenizer,但可以使用String.split()。

我的怀疑

  1. 为什么会这样,即使我发现它更省时。
  2. 不鼓励使用的原因是StringTokenizer什么?
  3. 如果一个人想用简单的regex像我的问题是什么,那么是StringTokenizer不是更好String.split()
奥耶比西

与StringTokenizer相比,String.split()更灵活,更易于使用。StringTokenizer早于Java对正则表达式的支持,而String.split()支持正则表达式,这使它比StringTokenizer强大得多。同样,String.split的结果是一个字符串数组,通常这是我们想要我们的结果的方式。StringTokenizer确实比String.split()快,但出于大多数实际目的,String.split()足够快。

检查此问题的答案以获取更多详细信息扫描程序与StringTokenizer与String.Split

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有评估字符串的遏制更有效的方法?

如何验证Java中的字符串是否为有效URL

在Java中,如何更有效地附加字符串?

如何在Java中检查给定的字符串是否为有效的JSON

在Java中,++ x是否比x ++更有效?

如何检查(字符串)位置在Java中是否是有效的保存路径?

有没有更有效的方法来处理此函数中的字符串转义?

有什么更有效的?将拆分字符串存储在数组中,或在需要时调用split方法

更有效的分割字符串的方法

使用模式/匹配器是否比遍历字符串和查找字符更有效?

更有效的字符串创建方式

如何有效地将字符串拆分成J中的行?

如何基于参数以更有效和更好的方式分析数据库表中的字符串?

在字符串列表中搜索某些字符串的更有效方法?

使用Fuzzywuzzy时如何更有效地比较字符串?

当字符串保留在集合中时,c_str()是否仍然有效

检查字符串数组中是否存在字符串的有效方法

有没有更有效的方式来扩展字符串?

在字符串熊猫列中查找多个关键字的更有效方法

在Java中构建字符串时,替换转义序列的有效方法

如何在JavaScript中更有效地实现这些基数到字符串函数?

生成此字符串的更有效方法

有没有更有效的方法来检查字符串中的字符?

哪种更有效的方式在C / C ++中存储字符串,数组或指针?

在Java中有效使用修剪和拆分字符串

如何有效地基于和或参数在 Python 中拆分字符串?

列表中更有效的字符串比较

仅计算字符串数组中的字母数字字符的更有效方法是什么?

迭代字符串以將其符號組合放入哈希圖中如何更有效?