【发布时间】:2014-05-18 06:17:30
【问题描述】:
我想用java中的特殊字符替换所有“特殊字符”
例如,“cash&carry”将变为“cash+carry”,“cash$carry”将变为“cash+carry”
我有一个示例 CSV 文件
这里的 CSV 标题是“What”和“Where”
What,Where
salon,new+york+metro
pizza,los+angeles+metro
crate&barrel,los+angeles+metro
restaurants,los+angeles+metro
gas+station,los+angeles+metro
persian+restaurant,los+angeles+metro
car+wash,los+angeles+metro
book store,los+angeles+metro
garment,los+angeles+metro
"cash,carry",los+angeles+metro
cash&carry,los+angeles+metro
cash carry,los+angeles+metro
预期输出
What,Where
salon,new+york+metro
pizza,los+angeles+metro
crate+barrel,los+angeles+metro
restaurants,los+angeles+metro
gas+station,los+angeles+metro
persian+restaurant,los+angeles+metro
car+wash,los+angeles+metro
book+store,los+angeles+metro
garment,los+angeles+metro
cash+carry,los+angeles+metro
cash+carry,los+angeles+metro
cash+carry,los+angeles+metro
示例代码如下
String csvfile="BidAPI.csv";
try{
// create the 'Array List'
ArrayList<String> What=new ArrayList<String>();
ArrayList<String> Where=new ArrayList<String>();
BufferedReader br=new BufferedReader(new FileReader(csvfile));
StringTokenizer st=null;
String line="";
int linenumber=0;
int columnnumber;
int free=0;
int free1=0;
while((line=br.readLine())!=null){
linenumber++;
columnnumber=0;
st=new StringTokenizer(line,",");
while(st.hasMoreTokens()){
columnnumber++;
String token=st.nextToken();
if("What".equals(token)){
free=columnnumber;
System.out.println("the value of free :"+free);
} else if("Where".equals(token)){
free1=columnnumber;
System.out.println("the value of free1 :"+free1);
}
if(linenumber>1){
if (columnnumber==free){
What.add(token);
} else if(columnnumber==free1){
Where.add(token);
}
}
}
}
// converting the 'What' Array List to array
String[] what=What.toArray(new String[What.size()]);
// converting the 'Where' Array List to array
String[] where = Where.toArray(new String[Where.size()]);
for(int i=0;i<what.length;i++){
String data = what[i].replaceAll("[^A-Za-z0-9\",]| (?!([^\"]*\"){2}[^\"]*$)", "+").replace("\"", "");
System.out.println(data);
System.out.println(where[i]);
String finaldata = data+where[i];
String json = readUrl(desturl);
br.close();
}catch(Exception e){
System.out.println("There is an error :"+e);
}
所有特殊字符、所有空格和双引号都应删除并替换为所需的输出。
我正在使用 value.replaceAll("[^A-Za-z0-9 ]", "+") ,但它不起作用。
错误
cash
carry"
感谢任何帮助。正则表达式的新手。
【问题讨论】:
-
什么不起作用?您当前的输出是什么?为什么会出错?
-
@Robin :例如“书店”仍然是“书店”,它不会改变。
-
您是否将replaceAll 的结果重新分配给某个字符串引用?你需要知道字符串是不可变的,这意味着它们不能改变,所以像
replace这样的方法不会影响原始字符串,而是创建它的新版本并返回它。 -
另外,您如何期望
"cash,carry",los+angeles+metro变成cash+carry,los+angeles+metro?您刚刚决定将所有非字母数字字符和空格替换为空格,因此它将导致+cash+carry++los+angeles+metro。 -
@Pshemo 就是这样,变成了+cash,carry逃到了下一行,因为逗号怎么处理,谢谢。