`
thirtysix
  • 浏览: 36557 次
  • 性别: Icon_minigender_1
  • 来自: 河北承德
社区版块
存档分类
最新评论

java String replaceAll 对 “+”,“?”的处理

阅读更多
String str = "WmqcdY0eoe6tKKvUrW+35g==";

str 
= str.replaceAll("+","%2B);

//将“+”转换为%+16进制

使用上面的方法对“+”进行替换时出现如下异常信息:

java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0
+
^
    at java.util.regex.Pattern.error(Unknown Source)
    at java.util.regex.Pattern.sequence(Unknown Source)
    at java.util.regex.Pattern.expr(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.util.regex.Pattern.
<init>(Unknown Source)
    at java.util.regex.Pattern.compile(Unknown Source)
    at java.lang.String.replaceAll(Unknown Source)

用Google反复查找之后找到了问题的原因,String 在替换“+”和“?”时需要做一下特殊的处理。

  /** *//**
     * 
     * 
@param source 需要处理的字符串
     * 
@param oldString 需要被替换的字符
     * 
@param newString 替换后的字符
     * 
@return
     * 比如 需要替换字符串中的?
     * String str = "Who am I ?";
     * replace(str,"?","%3F");
     
*/

    
public static String replace(String source, String oldString,
                                 String newString) 
...{
        StringBuffer output 
= new StringBuffer();
        
int lengthOfSource = source.length();
        
int lengthOfOld = oldString.length();
        
int posStart = 0;
        
int pos; //
        while ( (pos = source.indexOf(oldString, posStart)) >= 0...{
            output.append(source.substring(posStart, pos));
            output.append(newString);
            posStart 
= pos + lengthOfOld;
        }

        
if (posStart < lengthOfSource) ...{
            output.append(source.substring(posStart));
        }

        
return output.toString();
    }
分享到:
评论

相关推荐

    Java中replace、replaceAll和replaceFirst函数的用法小结

    Java中的`replace`、`replaceAll`和`replaceFirst`是字符串操作中常见的方法,用于替换字符串中的特定子串。它们都是`String`类的方法,但各自有不同的行为和用途。 1. `replace(CharSequence target, CharSequence...

    java中的String类常用方法解析(一)

    - `replaceAll(String regex, String replacement)`:使用正则表达式替换匹配的部分。 7. **分割字符串** - `split(String regex)`:根据正则表达式将字符串分割成数组。 8. **获取字符/字节数组** - `...

    Java String.replace()方法&quot;无效&quot;的原因及解决方式

    Java String.replace()方法是一种常用的字符串替换方法,但是有时候我们发现它并没有生效,出现这种情况的原因是我们对String类的replace方法的使用方法不正确。 首先,让我们来看一个简单的例子: public class ...

    javaString总结共13页.pdf.zip

    这份"javaString总结共13页.pdf.zip"压缩包文件显然包含了关于Java字符串的深入讲解,覆盖了多个关键知识点。虽然没有提供具体的PDF内容,但我可以基于常见的Java String主题为你概述一些重要的概念。 1. **字符串...

    Java的 String 类常用方法大全

    Java 中的 String 类提供了丰富的方法来处理字符串,这些方法可以帮助开发者快速高效地操作字符串。本文将对 Java 的 String 类常用方法进行详细介绍。 一、字符串的替换 Java 中的 String 类提供了三种方法来...

    有关Java String常用方法的总结.docx

    ### 有关Java String常用方法的总结 #### 一、String 类概述 `String`类是Java中最基础也是最重要的数据类型之一,在Java中被定义为一个不可变类(immutable class),这意味着一旦一个`String`对象创建之后,其...

    JAVA小论文(浅谈String类)

    Java的小论文浅谈String类,讨论了Java中字符串的存储和处理。Java提供了String类、StringBuffer类和StringTokenizer类来存储和处理字符串。在大多数情况下,可以使用String类来创建字符串。 String类在存储和处理...

    Java中的正则表达式 -- 示例详解

    Java中的正则表达式是程序开发中处理字符串匹配、查找、替换和判断的强大工具,尤其在处理复杂的文本操作时,正则表达式能显著提高效率。自Java 1.4引入`java.util.regex`包以来,Java程序员可以方便地利用正则...

    java去掉小数点后面多余的0.txt

    s = s.replaceAll("0+?$", ""); // 如果只剩下小数点,则去掉小数点 s = s.replaceAll("[.]$", ""); } return s; } } ``` ##### 2.2 方法解释 - **方法定义**:`subZeroAndDot` 方法接收一个字符串类型的...

    Java-String类的常用方法总结.pdf

    首先,String类位于`java.lang`包中,这意味着它对所有Java程序都是自动导入的,无需额外引用。String类被声明为final,这意味着我们无法创建其子类,同时也表明String对象一旦创建,其内容就不能改变。字符串通常由...

    正则表达式中的 .*? 或 .*+ 的意思

    s = s.replaceAll("\\[.+?\\]", ""); ``` 这里,`\\[.+?\\]` 就使用了懒惰模式,它只会匹配每个 `[` 和第一个 `]` 之间的内容,从而成功地去掉了方括号内的 URL。 总结起来,正则表达式中的 `.*?` 和 `.*` 关键...

    Java中文字符处理.docx

    ### Java中文字符处理知识点 #### 一、判断字符串是否全为汉字 为了判断一个字符串是否完全由汉字组成,可以通过正则表达式实现。具体做法是使用Unicode编码范围内的汉字字符来构建一个匹配模式。 **代码示例:**...

    Java String类正则操作示例

    Java String类正则操作示例 Java String类正则操作示例主要介绍了Java String类正则操作,结合实例形式分析了java针对数字的正则验证、过滤及邮箱正则验证相关操作技巧。下面将详细说明标题和描述中所说的知识点。 ...

    java http 发送xml报文(java发送xml报文实例+参数)

    String xmlString = writer.getBuffer().toString().replaceAll("\n|\r", ""); ``` 2. **设置HTTP请求** 使用HttpURLConnection创建连接并设置请求方法为POST: ```java URL url = new URL(...

    浅谈Java中replace与replaceAll区别

    而 Java 中的 replaceAll 方法则不同,replaceAll(String regex, String replacement) 方法使用给定的 replacement 替换字符串中所有匹配给定的正则表达式的子字符串。这个方法的参数是 regex(正则表达式)和 ...

    JAVA【第5章:面向对象基础】_String类的常用方法.rar

    由于其不可变性,每次对`String`对象的操作都会创建新的`String`对象,这在处理大量字符串时需要注意性能问题。`String`类位于`java.lang`包中,因此在使用时无需显式导入。 下面我们将详细讲解几个重要的`String`...

    JavaString常见操作.pdf

    这些只是`String`类中一部分常用的操作,实际使用中还有其他方法,如`replaceFirst()`、`replaceAll()`、`format()`等,它们都极大地丰富了对字符串的处理能力。理解并熟练运用这些方法,对于编写高效的Java代码至关...

    java去除空格、标点符号的方法实例.docx

    Java语言中去除空格、标点符号是一种常见的字符串处理操作,本文将通过实例代码详细介绍如何使用Java语言去除空格、标点符号。 去除空格的方法 在Java中,去除空格可以使用trim()、replace()、replaceAll()等方法...

    Java常用类与基础API-String的构造器与常用方法

    ### Java常用类与基础API-String的构造器与常用方法 #### 一、String的常用API-1 ##### (1)构造器 1. **介绍** - `public String()`: - 初始化新创建的 `String` 对象,以使其表示空字符序列。即创建了一个...

Global site tag (gtag.js) - Google Analytics