作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用 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/
我是一名优秀的程序员,十分优秀!