gpt4 book ai didi

java - 线程安全字符串拆分

转载 作者:行者123 更新时间:2023-11-29 06:39:36 24 4
gpt4 key购买 nike

我已经使用 StringTokenizer 和 String 的方法 indexOf() 然后是 substring() 进行了拆分测试。结果我必须知道,第二个比 StringTokenizer 更快。但我的问题是哪个最适合线程安全?

使用 StringTokenizer 拆分字符串:

String sample=null;
StringTokenizer tokens = new StringTokenizer("FF#Mukil","#");

if(tokens.hasMoreTokens())
{
sample= tokens.nextToken();
System.out.println(sample);
}

使用 String 的方法拆分字符串:

String sample= "FF#Mukil";
int pos=sample.indexOf('#');
System.out.println(sample.substring(0,pos));

在这些例子中,样本是全局变量提前致谢

编辑:在前面的第一个例子中,如下所示

StringTokenizer tokens = new StringTokenizer("FF#Mukil","#");

if(tokens.hasMoreTokens())
{
String sample= tokens.nextToken();
System.out.println(sample);
}

我改成下面这样

String sample=null;
StringTokenizer tokens = new StringTokenizer("FF#Mukil","#");

if(tokens.hasMoreTokens())
{
sample= tokens.nextToken();
System.out.println(sample);
}

已编辑:添加了 java 文件源。

//FileName=MySplitUtil.java
import javax.servlet.http.HttpServletRequest;
import java.util.StringTokenizer;
public class MySplitUtil
{
public static void setUsername_locale(HttpServletRequest request)
{
String value = (String) request.getAttribute("userLocale"); // userLocale's sample value looks like ffmukil$en_US
splite1(value,request);
splite2(value,request);
}
private static void splite1(String value,HttpServletRequest request)
{
StringTokenizer tokens = new StringTokenizer(value,"$");
String username=null;
String locale=null;
if(tokens.hasMoreTokens())
{
username = tokens.nextToken();
locale = tokens.nextToken();
}
request.setAttribute("usrName",username);
request.setAttribute("usr_Locale",locale);
}
private static void splite2(String value,HttpServletRequest request)
{
int pos = value.indexOf('$');
String username = value.substring(0,pos);
String locale = value.substring(pos+1,value.length());
request.setAttribute("usrName",username);
request.setAttribute("usr_Locale",locale);
}
}

最佳答案

因为您只使用局部变量,所以无论您用它们做什么,这两个版本都是绝对安全的...

要遇到线程安全问题,您需要(不正确地)跨线程共享一些东西。您的示例中无法共享任何内容。

更一般地说,字符串是不可变的,因此是线程安全的。所以第二个版本,假设 sample 变量是共享的,将是线程安全的。

编辑

您最近的修改确认了两件事:

  • 你的类是无状态的(没有实例变量)
  • 你只使用局部变量

因此这两种方法都是线程安全的,您应该选择更简单和/或更高效的方法。

关于java - 线程安全字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com