如何在map reduce程序中替换输入字符串中的特殊字符

时间:2014-12-06 09:50:21

标签: java mapreduce

我可以替换普通java程序中的特殊字符。

这是我的java代码:

public class A {

    public static void main(String[] args) {
    String s = "This785($^#')\"";
    System.out.println(s);
    s=s.replaceAll("[^\\w\\s]", "");
    System.out.println(s);

}

但我在我的地图缩减程序中尝试相同,但这不起作用

 public static class Map extends MapReduceBase implements
        Mapper<LongWritable, Text, Text, IntWritable> {

    @Override
    public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter)
            throws IOException {

        String s = value.toString().replaceAll("\\w+\\s+","");
        String[] words=s.split(" ");
        for(String a:words){


output.collect(new Text(a),new  IntWritable(1));
        }
    }

示例输入地图缩减程序

   "This@#$ is$# word$%^ (Count)"
  "This@#$ is$# word$%^ (Count)"

地图减少程序的输出

 "This@#$   2
  (Count)"  2
    is$#    2
 word$%^    2

我做错了什么,请帮帮我!

1 个答案:

答案 0 :(得分:1)

您的正则表达已从[^\\w\\s]更改为\\w+\\s+

此正则表达式表示匹配一个或多个字母(a-z / A-Z)或数字(字母数字),后跟空格或制表符或新行等,并将其替换为空字符串。在你的字符串中你有:

 "This@#$ is$# word$%^ (Count)"

你不满足于这种情况,因此不满足输出。你要么有$或#或^后跟一个空格,而不是字母数字字符,后跟一个空格。