如何在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

做错了什么,请帮助我!

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

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

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

您不满足情况,因此不满足输出。您要么有 $ 或 # 或 ^ 后跟一个空格,但没有字母数字字符后跟一个空格。

相关内容

  • 没有找到相关文章

最新更新