`
thirtysix
  • 浏览: 35687 次
  • 性别: 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();
    }
分享到:
评论

相关推荐

    基于javatcpsocket通信的拆包和装包源码-Java-Note:Java自学

    基于java tcp socket通信的拆包和装包源码 ...String.replaceAll(old, new); 其中old是什么形式? String使用"+"拼接快还是使用StringBuilder.append()快? 引用类型为null, 能否找到其所属的静态类型? sw

    java金额转大写

    public static String arabNumToChineseRMB(int moneyNum){ String res=""; int i=3; if(moneyNum==0) return "零元"; while(moneyNum&gt;0){ res=ChineseUnit[i++]+res; res=ChineseNum[moneyNum]+res; money...

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

    主要介绍了Java String.replace()方法"无效"的原因及解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    java校验密码重复的代码

    public static boolean validatePassword(String str) { String REG_PATTERN="^\\w{8,31}$"; Pattern pattern=Pattern.compile(REG_PATTERN); Matcher matcher=pattern.matcher(str); if(matcher.matches()...

    java面试题

    答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新的对象,StringBuffer是可变的字符序列,所以如果要经常改变某个字符串的话建议使用StringBuffer。 list、set、map问题? 答:set 不允许...

    java 爬网 程序 示例

    String p = response.replaceAll("\\&[a-zA-Z]{1,10};", "") .replaceAll("&lt;[^&gt;]*&gt;", "");//去掉网页中带有html语言的标签 System.out.println(p); } catch (Exception e) { e.printStackTrace(); ...

    java写的将字符串中的中文转化为拼音等一系列方法

    return pybf.toString().replaceAll("\\W", "").trim(); } /** * 获取汉字串拼音,英文字符不变 * @param chinese 汉字串 * @return 汉语拼音 */ public static String getFullSpell(String chinese)...

    java-正则表达式-正则表达式元素介绍

    正则表达式主要配合以下方法使用 匹配 string.matches() 分割 string.split() 替换 string.replaceAll()

    JAVA解惑.pdf

    Java 谜题 谜题 20:我的类是什么? 下面的程序被设计用来打印它的类文件的名称。如果你不熟悉类字面常量,那么 我告诉你 Me.class.getName()将返回 Me 类完整的名称,即 “com.javapuzzlers.Me”。那么,这个程序...

    java编写智能合约-简单的用java代码实现智能合约.pdf

    nextEntry.isDirectory() && nextEntry.getName().endsWith(".class")){ // 层层获取到jar包的jarEntry,替换为class对象中的className形式 String name = nextEntry.getName().replaceAll("/",".").replaceAll("....

    对DAO编写单元测试源代码

    String ticket = UUID.randomUUID().toString().replaceAll("\\-", ""); PasswordTicket pt = new PasswordTicket(); pt.setUser(user); pt.setTicket(ticket); pt.setCreatedDate(System....

    java类所在工程路源代码

    java类所在工程路源代码String path=this.getClass().getResource("/").getPath(); xmlpath=xmlpath.replaceAll( "%20"," ");

    达内客户端+聊天室源码

    if(j == 1){//对时间单独进行处理一下 msg = msg.substring(msg.indexOf("(")+1,msg.length()-1).trim(); } vvs.get(i-1).add(msg);//添加进二维集合 } } vvs = getAite(vvs); return vvs; } //...

    springmvc-jdbcTemplate

    jdbcTemplate.getDataSource()).getJdbcUrl().replaceAll("://.*$", "")); } @Override public List&lt;Map&lt;String, Object&gt;&gt; search(String sql, Object... params) throws DaoAccessException { try { ...

    去掉所有的html标签

    private String stripTags(final String HTMLString) { final String noHTMLString = HTMLString.replaceAll("\\*?&gt;",""); return noHTMLString; }

    微信下载录音amr转换MP3.docx

    微信下载录音amr转换MP3(成功测试详细 public static File ... downloadUrl = downloadUrl.replaceAll("ACCESS_TOKEN", accessToken).replaceAll("MEDIA_ID", mediaId); File file = null; File file2 = null;

    HXSDKHelper.java 环信Demo 

    * 因为可能会有UI页面先处理到这个消息,所以一般如果UI页面已经处理,这里就不需要再次处理 * activityList.size() 意味着所有页面都已经在后台运行,或者已经离开Activity Stack */ protected void ...

    java-study:基本的Java理解

    st.replaceAll(a,b) :用其他字符(b)替换字符串(st)的某些部分(a) st.substring(i,j) :提取字符串(st)的特定部分(i &lt;= index &lt;j) st.toUpperCase() :将所有字符串字母替换为大写 st....

    通过Java正则表达式去掉SQL代码中回车换行和多余空格

    代码如下: public static void main(String[] args) { String ... String sql2 = Pattern.compile(” {2,}”).matcher(s).replaceAll(” “); String sql3 = s.replaceAll(” {2,}”,” “); String sql4 = sql.repla

    java 文本编辑器

    import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.io....

Global site tag (gtag.js) - Google Analytics