package test.hewen;
import java.io.UnsupportedEncodingException;
import java.util.Map;
public class StringUtil {
/***
* 把一个字符串分离开,并按照key/value形式保存到Map中
* @param map 字符串中的字符存放在map中
* @param data 要分离的字符串
* @param encoding 字符编码
* @throws UnsupportedEncodingException
*/
public static void parseParameters(Map map, String data, String encoding)
throws UnsupportedEncodingException {
if ((data != null) && (data.length() > 0)) {//将字符串转换为字节数组
byte[] bytes ;
bytes=data.getBytes();
parseParameters(map, bytes, encoding);
}
}
/****
* 将字节数组中的字符分离到map中,该方法支持字符分离的标记:'%',
* '?','&'
*
* @param map 存放分离的字符
* @param data 分离的字节数组
* @param encoding 按什么编码方法
* @throws UnsupportedEncodingException
*/
public static void parseParameters(Map map, byte[] data, String encoding)
throws UnsupportedEncodingException {
if (data != null && data.length > 0) {
int ix = 0;
int ox = 0;
String key = null;
String value = null;
while (ix < data.length) {//对分离的字符数组循环
byte c = data[ix++];
switch ((char) c) {
case '%':
case '?':
case '&'://当字节数组中的元素,遇到'%','?','&'字符,就创建value字符串
value = new String(data, 0, ox, encoding);
if (key != null) {
putMapEntry(map, key, value);
key = null;
}
ox = 0;
break;
case '='://当字节数组中的元素,遇到'='字符,那么创建key字符串
key = new String(data, 0, ox, encoding);
ox = 0;
break;
case '+'://当字节数组中的元素,遇到'+',那么就是以' '代替
data[ox++] = (byte) ' ';
break;
default:
data[ox++] = c;
}
}
//最后一个截取的字符串,要进行处理
if (key != null) {
value = new String(data, 0, ox, encoding);
putMapEntry(map, key, value);
}
}
}
/****
* 把分离的小字符串存放在map中
*
* @param map
* @param name
* @param value
*/
private static void putMapEntry(Map map, String name, String value) {
map.put(name, value);
}
}
测试类:
package test.hewen;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/****
* 这个是把一个字符串分离开,并按照key/value形式保存到Map中,
* 分离的格式是以%,?,&其他就不支持了
*
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) throws UnsupportedEncodingException {
String encoding = "ISO-8859-1";
String queryString="userName=tar+zan%password=pw+d";
Map.Entry entry;
Map results= new HashMap();
StringUtil.parseParameters(results, queryString, encoding);
Iterator it=results.entrySet().iterator();
while(it.hasNext()){
entry=(Entry) it.next();
System.out.println("key="+entry.getKey()+" value="+entry.getValue());
}
}
}
分享到:
相关推荐
JSON-lib是Java中处理JSON的一个库,它提供了多种方式将Java对象转换为JSON格式的字符串,同时也可以将JSON格式的字符串转换回Java对象。JSON-lib支持多种Java对象类型,包括基本类型、集合、数组、Map以及自定义...
nim-templates库是专为Nim语言设计的一个轻量级字符串模板引擎,它允许开发者以一种声明式的方式处理字符串,生成动态内容,常用于Web开发中的HTML渲染或生成静态文本。 nim-templates库的核心概念是模板,模板是一...
这一系列组件为Java开发人员提供了一个强大的工具库,能够简化日常开发任务并提高效率。 1. Jakarta Commons Lang Jakarta Commons Lang库提供了一系列用于字符串处理、基本对象操作、数学计算和时间操作的工具。它...
`public`成员在任何地方都可访问,`private`成员只能在定义它们的类内部访问,而`protected`成员在同一个包或子类中可访问。 `String`、`StringBuffer`和`StringBuilder`都是用来处理字符串的类,但它们有不同的...
1. **高性能**:Fastjson以其高效的性能著称,无论是解析JSON字符串还是生成JSON字符串,都能达到较高的速度,远超同类JSON库。 2. **易用性**:API设计简洁明了,开发者可以轻松上手,进行JSON操作。 3. **自动...
3. **构建数据模型**: 在Java代码中,你需要创建一个数据模型(通常是一个Map对象),将要显示的数据绑定到对应的键上。例如,你可以创建一个Map,其中键是“name”,值是你要显示的名字。 ```java Map, Object> ...
而“工具”标签则表明,StringTemplate是一个实用的辅助工具,可以帮助开发者提高开发效率,生成高质量的文本输出。 在实际应用中,StringTemplate常用于生成报表、邮件模板、配置文件等场合。由于其强大的功能和...
这些类型直接存储在内存中,而`String`类则是引用类型,它在Java中是一个对象,存储在堆内存中。`String`类提供了丰富的字符串处理方法,如拼接、查找、替换等。 #### 2. 字符串操作详解 字符串的反转和替换可以...
在MyBatis中,#{ }和${ }是两种不同的参数传递方式,#{ }用于传递参数,而${ }用于传递字符串。 在MyBatis中,可以使用like语句来进行模糊查询,例如: `SELECT * FROM users WHERE name LIKE '%${name}%'` 在...
7. 字符串:std::string是C++中的一个类,用于处理文本数据。它提供了许多操作字符串的方法,如拼接(+运算符)、查找、替换等。 8. 数值计算:C++标准库还包含了一些数学函数,如sqrt(平方根)、pow(幂运算)、...
9. **闭包**:闭包是JavaScript中的一个高级特性,它允许函数访问并操作其外部作用域的变量,常用于创建私有变量和实现模块化。 10. **错误处理**:try...catch语句用于捕获和处理运行时错误,是编写健壮代码的关键...
Java的字符串池就是一个享元模式的实例,通过`String.intern()`方法可以实现。 11. 模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。在Java的`java.io.InputStream...
- 三引号的另一个常见用途是作为类或模块的文档字符串,可以通过 `__doc__` 属性访问: ```python class MyClass: """这是一个类的例子.""" print(MyClass.__doc__) ``` #### 2. Python的参数传递,是值...
当客户机第一次调用一个Stateful Session Bean 时,容器必须立即在服务器中创建一个新的Bean实例,并关联到客户机上,以后此客户机调用Stateful Session Bean 的方法时容器会把调用分派到与此客户机相关联的Bean实例...
- **Memcached**: Memcached是一个高性能、分布式内存对象缓存系统,用于加速动态Web应用,减轻数据库负载。 #### 十九、Oracle数据库中rownum与rowid的区别? - **rownum**: rownum是一个伪列,用于返回结果集中...
2. **字符串操作**:在C++中,`std::string`类是处理字符串的基础。单词的提取通常涉及`std::getline()`函数来读取一行,然后使用`std::istringstream`或`std::stringstream`来拆分单词。为了去除标点符号,可以使用...
在Java开发中,MyBatis是一个广泛使用的持久层框架,它将SQL语句与代码分离,提高了开发效率和可维护性。本主题主要探讨MyBatis中的动态SQL元素,包括、、、、、和,这些都是构建灵活、可扩展SQL查询的重要工具。 1...