Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中提高regex性能_Java_Regex_Performance - Fatal编程技术网

如何在java中提高regex性能

如何在java中提高regex性能,java,regex,performance,Java,Regex,Performance,我有这段代码将“=”之前的整个文本转换为大写 Matcher m=Pattern.compile((((?:^\n)。*?=)”).Matcher(conteudo); while(m.find()){ conteudo=conteudo.replaceFirst(m.group(1),m.group(1.toUpperCase()); } 但是当字符串太大时,它会变得非常慢,我想找到一种更快的方法来实现这一点 有什么建议吗 编辑 我解释得不对。 我有一篇这样的文章 field=value f

我有这段代码将“=”之前的整个文本转换为大写

Matcher m=Pattern.compile((((?:^\n)。*?=)”).Matcher(conteudo);
while(m.find()){
conteudo=conteudo.replaceFirst(m.group(1),m.group(1.toUpperCase());
}
但是当字符串太大时,它会变得非常慢,我想找到一种更快的方法来实现这一点

有什么建议吗

编辑

我解释得不对。 我有一篇这样的文章

field=value
field2=value2
field3=value3
FIELD=value
FIELD2=value2
FIELD3=value3
我想把每一行都转换成这样

field=value
field2=value2
field3=value3
FIELD=value
FIELD2=value2
FIELD3=value3

使用多行正则表达式,我们只需分别获取每一行并替换它:)


使用多行正则表达式,我们只需分别获取每一行并替换它:)


使用多行正则表达式,我们只需分别获取每一行并替换它:)


使用多行正则表达式,我们只需分别获取每一行并替换它:)


像这样的怎么样?indexOf应该足够快

int equalsIdx = conteudo.indexOf('=');
String result = conteudo.substring(0, equalsIdx).toUpperCase() + conteudo.substring(equalsIdx, conteudo.length());

像这样的怎么样?indexOf应该足够快

int equalsIdx = conteudo.indexOf('=');
String result = conteudo.substring(0, equalsIdx).toUpperCase() + conteudo.substring(equalsIdx, conteudo.length());

像这样的怎么样?indexOf应该足够快

int equalsIdx = conteudo.indexOf('=');
String result = conteudo.substring(0, equalsIdx).toUpperCase() + conteudo.substring(equalsIdx, conteudo.length());

像这样的怎么样?indexOf应该足够快

int equalsIdx = conteudo.indexOf('=');
String result = conteudo.substring(0, equalsIdx).toUpperCase() + conteudo.substring(equalsIdx, conteudo.length());
试试这个

试试这个

试试这个


试试这个。

让regex快速工作的最快方法是不使用regex。对于性能敏感的操作来说,Regex从来都不是一个好的选择。(进一步阅读:)

尝试改用字符串类方法,或者编写一个自定义方法来执行您想要的操作。在“=”上使用带拆分的标记器,然后在尾部部分(在
\n
之后)使用
.toUpperCase()
)。或者,只需转换为
char[]
或使用
charAt()
并手动遍历它,在换行后将chars切换为upper,在“=”后返回常规方式

例如:

public static String changeCase( String s ) {
    boolean capitalize = true;
    int len = s.length();
    char[] output = new char[len];
    for( int i = 0; i < len; i++ ) {
      char input = s.charAt(i);
      if ( input == '\n' ) {
        capitalize = true;
        output[i] = input;
      } else if ( input == '=' ) {
        capitalize = false;
        output[i] = input;
      } else {
        output[i] = capitalize ? Character.toUpperCase(input) : input;
      }
    }
    return new String(output);
}
方法输出:

FIELD=value\n
FIELD2=value2\n
FIELD3=value3
请在此处尝试:

私人秘书(杰米·扎温斯基):

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题


让regex快速工作的最快方法是不使用regex。对于性能敏感的操作来说,Regex从来都不是一个好的选择。(进一步阅读:)

尝试改用字符串类方法,或者编写一个自定义方法来执行您想要的操作。在“=”上使用带拆分的标记器,然后在尾部部分(在
\n
之后)使用
.toUpperCase()
)。或者,只需转换为
char[]
或使用
charAt()
并手动遍历它,在换行后将chars切换为upper,在“=”后返回常规方式

例如:

public static String changeCase( String s ) {
    boolean capitalize = true;
    int len = s.length();
    char[] output = new char[len];
    for( int i = 0; i < len; i++ ) {
      char input = s.charAt(i);
      if ( input == '\n' ) {
        capitalize = true;
        output[i] = input;
      } else if ( input == '=' ) {
        capitalize = false;
        output[i] = input;
      } else {
        output[i] = capitalize ? Character.toUpperCase(input) : input;
      }
    }
    return new String(output);
}
方法输出:

FIELD=value\n
FIELD2=value2\n
FIELD3=value3
请在此处尝试:

私人秘书(杰米·扎温斯基):

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题


让regex快速工作的最快方法是不使用regex。对于性能敏感的操作来说,Regex从来都不是一个好的选择。(进一步阅读:)

尝试改用字符串类方法,或者编写一个自定义方法来执行您想要的操作。在“=”上使用带拆分的标记器,然后在尾部部分(在
\n
之后)使用
.toUpperCase()
)。或者,只需转换为
char[]
或使用
charAt()
并手动遍历它,在换行后将chars切换为upper,在“=”后返回常规方式

例如:

public static String changeCase( String s ) {
    boolean capitalize = true;
    int len = s.length();
    char[] output = new char[len];
    for( int i = 0; i < len; i++ ) {
      char input = s.charAt(i);
      if ( input == '\n' ) {
        capitalize = true;
        output[i] = input;
      } else if ( input == '=' ) {
        capitalize = false;
        output[i] = input;
      } else {
        output[i] = capitalize ? Character.toUpperCase(input) : input;
      }
    }
    return new String(output);
}
方法输出:

FIELD=value\n
FIELD2=value2\n
FIELD3=value3
请在此处尝试:

私人秘书(杰米·扎温斯基):

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题


让regex快速工作的最快方法是不使用regex。对于性能敏感的操作来说,Regex从来都不是一个好的选择。(进一步阅读:)

尝试改用字符串类方法,或者编写一个自定义方法来执行您想要的操作。在“=”上使用带拆分的标记器,然后在尾部部分(在
\n
之后)使用
.toUpperCase()
)。或者,只需转换为
char[]
或使用
charAt()
并手动遍历它,在换行后将chars切换为upper,在“=”后返回常规方式

例如:

public static String changeCase( String s ) {
    boolean capitalize = true;
    int len = s.length();
    char[] output = new char[len];
    for( int i = 0; i < len; i++ ) {
      char input = s.charAt(i);
      if ( input == '\n' ) {
        capitalize = true;
        output[i] = input;
      } else if ( input == '=' ) {
        capitalize = false;
        output[i] = input;
      } else {
        output[i] = capitalize ? Character.toUpperCase(input) : input;
      }
    }
    return new String(output);
}
方法输出:

FIELD=value\n
FIELD2=value2\n
FIELD3=value3
请在此处尝试:

私人秘书(杰米·扎温斯基):

有些人在遇到问题时会想“我知道,我会使用正则表达式。”现在他们有两个问题



我正要写同样的答案。我已经编辑了问题,请再看一遍。我解释错了。@LeonardoGaldioli:试试新版本:)那样的话,我需要不同的测试用例。它适用于给定的示例。我正要写相同的答案。我已经编辑了问题,请再次查看。我解释错了。@LeonardoGaldioli:试试新版本:)那样的话,我需要不同的测试用例。它适用于给定的示例。我正要写相同的答案。我已经编辑了问题,请再次查看。我解释错了。@LeonardoGaldioli:试试新版本:)那样的话,我需要不同的测试用例。它适用于给定的示例。我正要写相同的答案。我已经编辑了问题,请再次查看。我解释错了。@LeonardoGaldioli:试试新版本:)那样的话,我需要不同的测试用例。它适用于给定的示例。我如何转换为大写?@LeonardoGaldioli转换为大写。。。必须有str.to_upper或java中的某些东西。这是regex无法做到的。好吧,它可以通过一些regex风格来完成,但不能通过java的风格来完成。我如何转换为大写?@LeonardoGaldioli转换为大写。。。必须有str.to_upper或java中的某些东西。这是regex无法做到的。好吧,它可以通过一些regex风格来完成,但不能通过java的风格来完成。我如何转换为大写?@LeonardoGaldioli转换为大写。。。那里