【发布时间】:2013-01-02 16:55:04
【问题描述】:
我已经使用 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));
在这些示例中,sample 是全局变量 提前致谢
编辑: 在前面的第一个示例如下所示
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);
}
}
【问题讨论】:
-
我没有看到您的代码在多线程环境中有任何问题。
-
你能展示你的变量如何在多线程环境中使用吗?您当前的代码显示不需要同步。
-
@Jayamohan,你是怎么检查的?你能告诉我吗?
-
@JoshDM,我有一个使用 Apache 服务器和 Struts1 框架的网络应用程序。我在一个操作文件中使用该示例。
-
@FF Mukil - 根据您的代码,您似乎只在 METHOD SCOPE 中声明和使用变量。如果上面的所有代码都在方法中,即使这些方法同时被多个线程命中,任何一个线程的操作都不会影响另一个线程引用的数据。如果您的变量被声明为 CLASS 范围,那么我们就会遇到问题,但就目前而言,这里没有多线程问题。
标签: java performance split