/*
面向对象模拟项目——游戏软件:智能女友
@anthor zhy 0902Java基础班
@version 1.0
注意定义对象类时,不要定义成内部类,否则会出现:
错误: 无法从静态上下文中引用非静态 变量 this
如:GirlFriend_Demo gf = new GirlFriend_Demo(name,age);
*/
import java.util.*;
public class AI_GirlFriend{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请你输入要创建女友的输入姓名:");
String name = sc.next();
while(true){
if(name == "[\u4e00-\u9fa5]"){ //中文正则表达式
break ;
}else{
System.out.println("非法数据,您输入的不是汉字,请重新输入");
name = sc.next();
}
}
System.out.println("请你要创建女友的输入年龄:");
int age = sc.nextInt();
while(true){
if(age >25|| age<=14){ //判断年龄合法性
System.out.println("非法数据,请重新输入");
age = sc.nextInt();
}else{
break;
}
}
GirlFriend_Demo gf = new GirlFriend_Demo(name,age);
System.out.println("你想要的智能女友资料如下:\n姓名:"+gf.getName()+"\n年龄:"+gf.getAge()+"岁\n"+"性别:"+GirlFriend_Demo.sex);
//gf.paPaPa();
//gf.chat();
for(;;){
System.out.print("确认请按回车键:");
String temp = sc.next();
if (temp=="\n")
{
break;
}else{
System.out.println("键入有误,请重新输入");
}
}
sc.close();
}
}
class GirlFriend_Demo{
private String name;
private int age;
static char sex = '女';
public GirlFriend_Demo(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public void paPaPa(){
System.out.println("papapa");
}
public void chat(){
System.out.println("我想我可以跟你聊天");
}
}
输入中文不论一个字还是多个字都报输入错误,不应该啊。我设置的正则表达式是从网上差的。可是为啥通不过呢?
------解决思路----------------------
正则表达式是利用==测试满足表达式吗?
------解决思路----------------------
String ==另一个String肯定是不可以的
------解决思路----------------------
用.equals()?
------解决思路----------------------
正则表达式不是这么用的。
判断条件改成Pattern.compile(正则表达式).matches(带匹配字符串)
而且Java正则表达式里的\要写成\\
------解决思路----------------------
你想表达的是name属于后面那个吧?
举例: 1==(1-100)?
54==(1-100)
逻辑上肯定是不通的。
String name = sc.next();
char[] arr=name.toCharArray();
for(int x=0;x<arr.length;x++){
if((arr[x]>= 0x0391 &&arr[x]<= 0xFFE5)){}
我也是新手 只想到可以一个一个的校验
------解决思路----------------------
今天中午想了一下 晚上回来实践了一遍
import java.util.*;
public class AI{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
boolean flag=true;
while(flag){ System.out.println("请你输入要创建女友的输入姓名:");
String name = sc.next();
char[] arr=name.toCharArray();
for(int x=0;x<arr.length;x++){
if(!(arr[x]>= 0x0391 &&arr[x]<= 0xFFE5)){
flag=false;
break;
}
}
if(flag){
break;
}
else{System.out.println("非法数据,您输入的不是汉字,请重新输入");
flag=true;}
}
}
}
------解决思路----------------------
正则判断,直接用==不行吧
------解决思路----------------------
String regex = "[\u4e00-\u9fa5]";
match(regex, name);
------解决思路----------------------
if(name == "[\u4e00-\u9fa5]")你这是匹配字符串的地址去了,什么时候都是错误的。除非你这样
String name = "[\u4e00-\u9fa5]";
------解决思路----------------------
public void test2() {
// 中文内容也匹配
String pstr = "\"([^\"
------解决思路----------------------
[\u4e00-\u9fa5]]+)\"";
Pattern p = Pattern.compile(pstr);
Matcher m = p.matcher("\"goodjob里面有中文呢\"");
System.out.println(m.find() ? m.group(1) : "nothing");
}