替换字符串中美元大括号的字符串

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 创建日期:2014年6月9日 17:23:29
 * 作者:黄飞
 * 联系方式:QQ:834865081
 * 邮箱:[email protected]
 * */
public class RegUtil {
	/**
	 * @author 黄飞
	 * 作用查找字符串中所有的美元大括号的中间的字符
	 * @param value 字符串
	 * */
	public static List<String> findData(String value){
		/*匹配美元大括号的字符串*/
		String reg = "\\$\\{([^}]+)\\}";
		Pattern p = Pattern.compile(reg);
		Matcher matcher = p.matcher( value ) ;
		ArrayList<String>array = new ArrayList<String>();
		/*找出所有美元 大括号的字符串*/
		while(matcher.find()){
			String tempValue = matcher.group() ;
			/*取出大括号中间的字符*/
			tempValue = tempValue.substring( 2  , tempValue.length() -1) ;
			/*判断该字符是否已经查找到*/
			if(!array.contains(tempValue)){
				array.add( tempValue ) ;
			}
		}
		return array;
	}

	/**
	 * @author 黄飞
	 * 替换所以的美元字符串
	 * @param value 字符串
	 *        map 替换的值
	 *        noExistsReplace 是否全部替换
	 * */
	public static String replace(String value,Map<String,String> map , boolean noExistsReplace){
		for(Map.Entry<String,String> entry : map.entrySet()){
			String key = "\\$\\{" + entry.getKey() + "\\}";
			value = value.replaceAll(key, entry.getValue()) ;
		}

		if(noExistsReplace){
			List<String> datas = findData( value ) ;
			Map<String,String> tempValue = new LinkedHashMap<String, String>();
			for(String data : datas){
				tempValue.put(data , "" ) ;
			}
			return replace(value , tempValue, false ) ;
		}

		return value;
	}

	public static void main(String[] args){
		String value = "${zs}很好,${li}" ;
		List<String> datas = findData(value) ;
		Map<String,String> map = new LinkedHashMap<String, String>();
		int idx = 1 ;
		for(String data : datas){
			map.put(data, "值" + ( ++idx ) ) ;
		}
		map.remove("li");
		System.out.println( replace(value, map , true ) ) ;
	}
}

替换字符串中美元大括号的字符串

时间: 2024-08-12 13:35:50

替换字符串中美元大括号的字符串的相关文章

C#格式化字符串中转义大括号“{}”

原文:C#格式化字符串中转义大括号"{}" 今天,用C#写程序操作Excel,读取单元格内容根据所需格式生成字符串,使用String.Format(string format,object arg0)方法.以前只知"{0}"为索引占位符(即格式项),与参数列表中的第一个对象相对应,格式设置过程将每个格式项替换为对应对象的值的文本表示形式.但这次需将参数对象格式成一对大括号括起来的格式,即返回字符串"{对象arg0的文本表示形式}". [cshar

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

输入一个字符串,输出该字符串中对称的子字符串的最大长度。

public class LongestSymmtricalLength2 { /* * Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度. * 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4. */ public static void main(String[] args) { String[] strs = { "a","google", "elgoog", "agol

C# GetValueList 获得字符串中开始和结束字符串中间得值列表

/// <summary> /// 获得字符串中开始和结束字符串中间得值列表 /// </summary> /// <param name="styleContent">样式内容</param> /// <returns></returns> private MatchCollection GetValueList(string str, string s, string e) { return Regex.Mat

从一个字符串中提取一个子字符串

编写一个函数,它从一个字符串中提取一个子字符串.函数原型如下: int substr(char dst[], char src[],int start, int len) {} 目标是:从 src 数组起始位置向后偏移 start个字符的位置开始,最多复制 len 个非NUL 字符到 dst数组.在复制完毕之后, dst 数组必须以 NUL字节结尾.函数的返回值是存储于 dst 数组中的字符串的长度. #include<stdio.h> #include<stdlib.h> #de

从第一个字符串中删除第二个字符串中出现过的所有字符

// 从第一个字符串中删除第二个字符串中出现过的所有字符 #include <stdio.h> char* remove_second_from_first( char *first, char *second ) { if( first == NULL || second == NULL ) { printf("first or/and second should not be NULL\n"); return NULL; } char flag[256]={0}; ch

用php的strpos() 函数判断字符串中是否包含某字符串的方法

PHP strpos() 函数 strpos() 函数返回字符串在另一个字符串中第一次出现的位置. 如果没有找到该字符串,则返回 false.语法 strpos(string,find,start) 参数 描述string 必需.规定被搜索的字符串.find 必需.规定要查找的字符.start 可选.规定开始搜索的位置. 注释:该函数对大小写敏感.如需进行对大小写不敏感的搜索,请使用 stripos()函数.编辑本段例子 <?php echo strpos(www.idc-gz.com,"

JS 从一个字符串中截取两个字符串之间的字符串

/************************************************* 函数说明:从一个字符串中截取 两个字符串之间的字符串 参数说明:src_str 原串, start_str_loc开始查找的字符串, start_str起始字符串 end_str结束字符串 dep :两个字符串之间的字符串 /************************************************/ function analysysRespParam(src_str,s

C++ 在字符串中插入子串+判断字符串是否由空格组成

// Example3.cpp : 定义控制台应用程序的入口点. #include "StdAfx.h" #include <string> #include <iostream> using namespace std; int main(void) { string str,str1,str2; int index; //判断截取的子串是否由blanks组成 str=" cjc is a master."; str1="cjc