检测字符串是否包含英文字母

应用String类的toCharArray()方法。首先通过方法将指定的字符串转换为字符数组,循环字符数组,根据字符的ASCII值判断是否包含英文字母
在这里插入图片描述在这里插入图片描述
创建JavaBean类,判断字符串是否包含英文字母

public class StringUtil2 {
		private String str;		//要判断的字符串
		private boolean hasEn;	//是否包含英文字符
		private String cnStr;	//去掉英文字母后的字符串
		public String getCnStr() {
			return cnStr;
		}
		public void setCnStr(String cnStr) {
			this.cnStr = cnStr;
		}
		public String getStr() {
			return str;
		}
		public void setStr(String str) {
			this.str = str;
		}
		public boolean isHasEn() {
			char cArr[] = str.toCharArray();//将字符串转换为字符数组
			StringBuffer sb =new StringBuffer("");
			StringBuffer sb2 =new StringBuffer("");
			for(int i=0;i<cArr.length;i++){
				//调用String类的hashCode()方法也能获得字符的ASCII码
				//int ascii = String.valueOf(cArr[i]).hashCode();
				int ascii = (int)cArr[i];//强制转换可以直接得到字符的ASCII码
				//英文字符的 ASCII码范围,大写字母A-Z的范围65-90,小写字母a-z的范围97-122
				if((ascii>=65&&ascii<=90)||(ascii>=97&&ascii<=122)){
					sb.append(cArr[i]);//将每个英文字母添加到StringBuffer对象中
				}
				else{
					sb2.append(cArr[i]);
				}
			}
			this.setCnStr(sb2.toString());
			if(!sb.toString().equals(""))//如果保存英文字母的字符串不为"",说明该字符串包含英文字母
				hasEn=true;
			else
				hasEn=false;
			return hasEn;
		}
		public void setHasEn(boolean hasEn) {
			this.hasEn = hasEn;
		}
		
	}

创建index.jsp页面,输入表单信息

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>判断字符串是否包含英文字母</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<style type="text/css">
		table{
			border: 1px solid;
			border-color: green;
			font-family:华文细黑;
			font-size: 13px;
			color:gray;
			
		}
		input{
			font-family:华文细黑;
			font-size: 13px;
			color:gray;
		}
	</style>
  </head>
  
  <body>
  
  	<form action="check2.jsp" method="post">
     <table>
     	<tr>
     		<td align="right">请输入字符串:</td>
     		<td><input type="text" name="str"  size="30"/></td>
     	</tr> 
     	<tr>
     		<td colspan="2" align="center"><input type="submit" value="检  查" /></td>
     	</tr>
     </table>	
     </form>
  </body>
</html>

创建check.jsp页面获得表单信息,通过StringUtil类中的方法进行判断

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("UTF-8");
 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <title>检查</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	<style type="text/css">
		table{
			border: 1px solid;
			border-color: green;
			color: green;
			font-size: 13px;
			font-family: 华文细黑;
		}
	</style>
  </head>
  <body>
   	<%
   		String str = request.getParameter("str");
  	 %>
  	 <!-- 使用useBean动作标签导入JavaBean对象 -->
  	<jsp:useBean id="strBean" class="com.cn.zj.bean.StringUtil2"></jsp:useBean>
  	 <!-- 对StringUtil类的str属性赋值 -->
  	<jsp:setProperty property="str" name="strBean" value="<%=str %>"/>
    <table>
    	<tr>
			<td align="right">输入的字符串:</td>
			<td>
				<!-- 从StringUtil对象中获得str的属性值 -->	
				<jsp:getProperty property="str" name="strBean"/>
			</td>
		</tr>
		<tr>
			<td align="right">是否包含英文字母:</td>
			<td>	
				<!-- 从StringUtil对象中获得hasEn的属性值 -->	
				<jsp:getProperty property="hasEn" name="strBean"/>
			</td>		
		</tr>
		<tr>
			<td align="right">去掉英文字母后的字符串:</td>
			<td>	
				<!-- 从StringUtil对象中获得cnStr的属性值 -->	
				<jsp:getProperty property="cnStr" name="strBean"/>
			</td>
		</tr>
 	</table>	
  </body>
</html>
<think>我们需要检查一个字符串是否同时包含数字和字母(即至少有一个数字和至少一个字母)。 方法: 1. 使用正则表达式:我们可以用一个正则表达式来同时匹配数字和字母。但是,由于我们需要同时存在,可以分别检查是否包含数字和是否包含字母。 或者,我们可以用两个正则:一个检查是否有数字,一个检查是否有字母。 2. 遍历字符串:遍历每个字符,用Character.isDigit()和Character.isLetter()分别判断,设置两个标志位。 这给出两种方法: 方法一:使用正则表达式 检查数字:.*\\d.* 检查字母:.*[a-zA-Z].* 方法二:遍历字符串 我们写一个方法,返回boolean值,表示字符串是否同时包含数字和字母。 注意:如果字符串包含其他字符(如下划线、空格等)也没关系,只要同时包含至少一个数字和至少一个字母即可。 下面分别给出两种方法的代码:</think>### 检查字符串是否同时包含数字和字母的方法 在Java中,检查字符串是否同时包含数字和字母可以通过以下两种常用方法实现: #### 方法一:使用正则表达式(推荐) ```java public static boolean containsDigitAndLetter(String str) { // 同时匹配:至少一个字母 && 至少一个数字 return str.matches("(?=.*[a-zA-Z])(?=.*\\d).*"); } ``` **解释:** - `(?=.*[a-zA-Z])`:正向预查,确保字符串中有至少一个字母 - `(?=.*\\d)`:正向预查,确保字符串中有至少一个数字 - `.*`:匹配整个字符串 - `matches()`方法会检查整个字符串是否符合正则表达式 #### 方法二:遍历字符检查 ```java public static boolean containsDigitAndLetter(String str) { boolean hasLetter = false; boolean hasDigit = false; for (char c : str.toCharArray()) { if (Character.isLetter(c)) { hasLetter = true; } else if (Character.isDigit(c)) { hasDigit = true; } // 提前终止循环的优化 if (hasLetter && hasDigit) { return true; } } return false; } ``` **解释:** 1. 初始化两个布尔值标记字母/数字是否存在 2. 遍历字符串的每个字符: - `Character.isLetter()` 检测字母(包括大小写) - `Character.isDigit()` 检测数字(0-9) 3. 当两个标记同时为`true`时立即返回结果,优化性能 ### 使用示例 ```java public static void main(String[] args) { String testStr = "Hello123"; System.out.println(containsDigitAndLetter(testStr)); // 输出 true testStr = "12345"; System.out.println(containsDigitAndLetter(testStr)); // 输出 false } ``` ### 关键点说明 1. **字符定义**: - 字母:Unicode字母(包括中文等非英文字母),使用`Character.isLetter()` - 数字:0-9的阿拉伯数字,使用`Character.isDigit()` 2. **性能考虑**: - 正则表达式简洁但效率较低(适合短字符串) - 循环遍历效率更高(尤其对长字符串) 3. **特殊情况处理**: - 空字符串直接返回`false` - 空格、标点等非字母数字字符会被忽略 ### 常见错误场景 ```java // 错误:只检查了字母或数字之一 str.matches("[a-zA-Z0-9]"); // 错误!仅检查单个字符 // 错误:未考虑字符顺序 str.matches("[a-zA-Z]+\\d+"); // 错误!要求字母必须全在数字前 ``` ### 扩展场景 - 如果需要**精确匹配大小写**:使用正则`[a-z]`和`[A-Z]`分别处理 - 如果需要**排除特殊字符**:添加额外检查逻辑 - 如果需要**统计数量**:将布尔标记改为计数器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值