JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)
转载自:http://blog.csdn.net/skl_tz/article/details/9009805
JPasswordField 用作密码的输入框,似乎很方便,但是,为了得到输入的内容,一般都会使用这样的方法去获取密码:
- JPasswordField input_password = new JPasswordField();
 - String password = input_password.getPassword().toString();
 
这种方法比较合乎常理,因为input_password.getPassword() 方法得到的是一个字符数组,然而我想要的是一个字符串,于是,第一观感应该就是 toString()方法了,但是不可否认的是,toString之后的结果是乱码 ~ ~
乱码的原因:如果看下源码就知道,这里的toString()方法是继承自其父类Object的,它并没有重写这个方法,而Object 中的 toString()方法只是单纯的将字符数组强制转化为字符串,因此出现了乱码。官方api中也描述了这个事实:
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
解决方案:
- JPasswordField input_password = new JPasswordField();
 - String inputPassword = String.valueOf(input_password.getPassword());
 
使用String.valueOf( )可以有效的解决这个问题
原因如下:
这个是官方的源码:
- public static String valueOf(char data[]) {
 - return new String(data);
 - }
 
从源码中可以看到,实际上valueOf()方法是通过new 一个String 对象来完成转化的
官方api 是这样解释new String(char  data[ ])的:分配一个新的 String,使其表示字符数组参数中当前包含的字符序列,可以看到,new后的字符串实际是原来字符数组序列表示,这正是想要的结果  ^  ^
也可用如下方式,效果是一样的,注意是TextField,而不是JTextField ,使用setEchoChar('*') 方法和上面的方法没有本质区别:
- TextField input_password = new TextField();
 - input_password.setEchoChar('*');
 - String inputPassword = input_password.getText().trim();
 
虽然这只是一个小小的问题,但是只有好好解决了诸多小问题,才能解决更多由小问题组成的大问题 ~ ~
JPasswordField 中得到的字符数组转化为字符串(密码乱码问题)的更多相关文章
- C语言中数组转化为字符串的方法
		
#include<stdio.h> #include <stdlib.h> #include <string.h> #define NR(x) (sizeof(x) ...
 - php数组转化为字符串
		
1.函数explode(); 这个是字符串转化为数组 , implode() ;这个是数组转化为字符串. $array=explode(separator,$string); $string=imp ...
 - java字符数组char[]和字符串String之间的转换
		
java字符数组char[]和字符串String之间的转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 使用String.valueOf()将字符数组转换成字符串 void (){ cha ...
 - js中怎么把类数组转化为数组
		
说起伪数组,首先想到arguments, 这个我们函数参数的一个类数组,是类数组的代表. 1.拥有length属性,可以使用下标来访问元素,这两点和数组相同. 2.不能使用数组的方法,他们不能使用Ar ...
 - vc中无符号字符数组保存的内存值转换为无符号整数保存
		
分为三步,第一步,将进行指针类型转换:第二步,进行*地址运算:第三部赋值. 贴代码如下: unsigned char numberPlain [4] = {0}; UINT32 MaxNumber = ...
 - python 中的 用chr()数值转化为字符串,字符转化为数值ord(s)函数
		
1.1 python字符串定义 #!/usr/bin/python # -*- coding: utf8 -*- # 定义一个字符串 s1 = 'this is long String that sp ...
 - 【C语言】将文本中汉字读入字符数组输出乱码
		
输出中文字符乱码 今天从文件中将中文读入字符数组后输出发现其中文变成了乱码,,令人头大. 解决办法 将文本编码格式改成ANSI即可. 打开记事本->文件->另存为->更改编码格式-& ...
 - qt 字符数组如何转换字符串?
		
char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);
 - 关于web.xml中配置Spring字符编码过滤器以解决中文乱码的问题
		
当出现中文乱码问题,Spring中可以利用CharacterEncodingFilter过滤器解决,如下代码所示: <!-- Spring字符编码过滤器:解决中文乱码问题 --> < ...
 
随机推荐
- LIS (最长上升子序列)
			
LIS两种写法 O(n^2) dp[i]表示以a[i]结尾的为LIS长度 #include <algorithm> #include <iostream> #include & ...
 - HDU2897邂逅明下(博弈)
			
题目是说每次每个人可以取[p,q],而且是最后一个不得不取完的人输 这道题刚刚看别人过,还一直纠结感觉不会做,然后想到1+q的倍数,还是不会,想到p+q的倍数,却发现最后一个取的人是输的,然后就更加无 ...
 - MFC消息响应机制 q
			
MFC消息响应机制分析 1 引言微软公司提供的MFC基本类库(Microsoft Foundation Classes),是进行可视化编程时使用最为流行的一个类 库.MFC封装了大部分Windows ...
 - 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8)
			
很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们认为8个开关状态作为原子单位很好,于是他们把这称为"字节". 再后来,他们又做了一 ...
 - junit学习(3.x)
			
自动化测试 测试所有测试类 import junit.framework.TestCase; import junit.framework.Assert; /** *测试类必须要继承TestCase类 ...
 - inpuy type=date
			
http://www.w3schools.com/html/html_form_input_types.asp http://caniuse.com/#feat=input-datetime 浏览器兼 ...
 - 27.怎样在Swift中声明typedef?
			
在OC中,我们经常会用typedef关键字来声明Block,例如: /** * 通用的空闭包类型,无参数,无返回值 */ typedef void (^GofVoidBlock)(void); 在Sw ...
 - js 格式化数字
			
http://www.jb51.net/article/61585.htm 这篇文章主要介绍了JS实现的4种数字千位符格式化方法分享,本文给出了4种千分位格式化方法并对它们的性能做了比较,需要的朋友可 ...
 - sublime text 3 licence code
			
Update:2016年3月9日09:14:12 可用 —– BEGIN LICENSE —–Michael BarnesSingle User LicenseEA7E-8213858A353C41 ...
 - 真正通用的SQL分页存储过程
			
关于SQL分页的问题,网上找到的一些SQL其实不能真正做到通用,他们主要是以自增长ID做为前提的.但在实际使用中,很多表不是自增长的,而且主键也不止一个字段,其实我们稍做改进就可以达到通用.这里还增加 ...