虽然使用java来开发android的应用层,但是与Java的有些东西还是有所出入。
本篇博客结合android的EditText与String类的方法,希望能在开发中帮助到你。
这篇博客您可以了解到:
<1> 获取EditText的内容,去除该内容包含的所有空格。
<2> 获取EditText的内容,判断该内容是否包含中文
效果图:
实现代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class EditTextAndString extends Activity {
private static final char SPACE = 0x20;
private EditText user = null;
private EditText result = null;
private Button button = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
user = (EditText) findViewById(R.id.user);
result = (EditText) findViewById(R.id.result);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
String name = user.getText().toString();
String res = removeAllSpace(name);
result.append("去除所有空格后:" + res + "\n");
if (isChinese(name)) {
// ToDo
}
}
});
}
/**
* 该字符是否包含中文字符
*
* @param c
* 字符
* @return 如果包含中文返回true,否则false
*/
public boolean isChinese(char c) {
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION
|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {
return true;
}
return false;
}
/**
* 该字符串是否包含中文字符
*
* @param str
* 字符串
* @return 如果包含中文返回true,否则返回false
*/
public boolean isChinese(String str) {
if ((str != null) && (!"".equals(str))) {
char[] ch = str.toCharArray();
int len = ch.length;
for (int i = 0; i < len; i++) {
// Log.d("mark", "<---> " + ch[i]);
if (isChinese(ch[i])) {
result.append("该字符串中第一个中文:" + ch[i] + "\n");
return true;
}
}
}
return false;
}
/**
* 去除字符串中所有空格
*
* @param s
* 字符串
* @return 字符串
*
* 注意:String类的trim()只可以去除两端的空格
*/
public String removeAllSpace(String s) {
String endString = "";
StringBuilder builder = new StringBuilder(endString);
int len = s.length();
for (int i = 0; i <len ; i++) {
// 获得字符
char c = s.charAt(i);
// 如果该字符不是空格
if (c != SPACE) {
builder.append(String.valueOf(c));
}
}
return builder.toString();
}
}
这里需要注意一个问题:
在Java的JDK中,表示空格在 java.awt.event.KeyEvent 类中有一个字段来表示:
public static final int VK_SPACE = 0x20;
但是在android中没有专门这个字段,专门查看android的import android.view.KeyEvent 类,也有一个字段:
public static final int KEYCODE_SPACE = 62;
但是他表示的不是字符的空格。通过查找Ascii码(
http://blog.csdn.net/androidbluetooth/article/details/6434049),可以知道空格的Ascii码知道,其值是0x20(32).