JAVA比较两个字符串是否相等上的一些问题

贴出我的代码求解决一下。。一点小问题
File file = new File(path);
try {
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineTXT = null;
String[] s3 = null;
while ((lineTXT = bufferedReader.readLine()) != null) {
System.out.println(lineTXT);
s3 = lineTXT.split(",");
}
for (int i = 0; i < s3.length; i++) {
int count = i + 1;
if (s3[i] != s2[i]) {
{
System.out.println("第" + count + "个位置的值不同,值为" + s3[i]);
}
}
}
read.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}


读取了文件的内容放在s3数组里里面然我我定义了一个 String[] s2 = {"124453", "258", "98", "123"};放我比较的时候如果条件写成i < s2.length 就可以正常运行但只能比较出前四项,引文两个数组长度不一样s3数组里面的内容比s数组里面的内容要多,把条件改成i < s2.length,结果比较出前四项之后报错ArrayIndexOutOfBoundsException: length=4; index=4,请问在我代码的基础上要怎么修改才能解决这个问题呢?比较两个长度不相等的数组~~~~

3个回答

你先取一下s2和s3的length,哪个长用那个做条件的边界啊。

sld22525482
「已注销」 我就是用长的出现了这个问题,想问一下怎么解决
3 年多之前 回复

1.判断长度,长度不一样 说明字符串不同
2.如果两个长度相等再 判断里面的是否相等。

FiangAsDre
GreenRookie 回复sld22525482: 你可以把两个数组遍历取出,得到两个list 然后判断两个list相等 ,就能得到不存在的5
3 年多之前 回复
sld22525482
「已注销」 请问能不能长度不一样的字符串数组,1,2,3,4和1,2,3,4,5比较呢 然后输出5的问世不相等?类似的操作。。
3 年多之前 回复
sld22525482
「已注销」 请问能不能长度不一样的字符串数组,1,2,3,4和1,2,3,4,5比较呢 然后输出5的问世不相等?类似的操作。。
3 年多之前 回复

正确的判断字符串是否相等的方法
if("字符串".equals("字符串")){
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java 提取两个字符串不相同元素
问题描述:1、有两个字符串;分别是: String str1=“Mr. Jones, of the Manor Farm, had locked the hen-houses for the night.”;//正确的 String str2=“Mr. Jones, off the Mannor Farm, head locked the hen-houses for the night.”;//错误的 off Mannor head 现在两个字符串对比查找出不相同元素 例如:错误的off Mannor head 找出即可,并且知道错误元素位置, 2.错误元素 off Mannor head 在str1位置。我怎么来做比较好,谢谢 如果描述有不明白,在线等!!!
java中equals进行字符串比较总是false
text2字符串是从数据库取出的 a2是定义的字符串 为什么两个字符串完全相同用equals比较还是显示 false
JAVA中怎么判断a+b和b+a两个字符串相同
JAVA中怎么判断两个等式一样? 比如有个数学问题,答案是a+b,前端传来用户输入的答案是b+a,那么该怎么判断用户输入的是正确的?a,b没有值,输入的只是字符串,求大佬指导一下
java中比较未知字符串所包好的内容
比如说我有两个词。中国 和国人,(这个字符串是未知的,我只是举例),怎么判断这两个字符串中 都包含相同的内容,在上述例子中相同的内容就是“国”?最好不用数组,求大神指导!
java两对5个共10个字符串比对
有2对字符串各5个共10个, 如何效率的逐个比对字符串 如果2对字符串全部相等返回true
两个字符串如何模糊比较?
比如“12344321我爱java”与“1我432爱2134ajav”被认为两个字符串相等!
通过C++/java socket向服务器端传递字符串并接收服务器的反馈字符串与使用浏览器实现相同功能有何区别?
1.在写一个打开网络服务的软件的接口时(win10环境),用c++和java 的socket分别写了两个客户端,客户端的功能是通过端口8081向本地服务器localhost发送字符串“?scanX”,然后接收服务器的反馈“done!",但是在接收的过程中会出现网络中断,要写接口的软件报错;但如果用浏览器,直接在地址栏输入"http://127.0.0.1:8081/?scanB" ,浏览器会直接显示"done!".我想解决的是用c++写一个接口exe能及时向服务器传递字符串并接收反馈,但此时反馈出现了问题,本人小白,问了很多前辈也未能解决疑问,在此求教各位前辈,大佬。 2.以下为c++代码段,运行到"sended request success!"后网络服务器不知为何断开,要写接口的软件报错 #include <iostream> #include <windows.h> using namespace std; //在windows网络编程中需要引入库 #pragma comment(lib, "wsock32.lib") int main(int argc, char *argv[]) { //在windows网络编程中导入库,linux中不需要 WSADATA Ws; if (WSAStartup(MAKEWORD(2, 2), &Ws) != 0) { cout << "Init Windows Socket Failed::" << GetLastError() << endl; return -1; } //通过域名获取IP地址 HOSTENT *host_entry = gethostbyname("127.0.0.1"); if (!host_entry){ return -1; } //将网络字节序的网络地址转为本地字节序 char *serverIP = inet_ntoa(*((struct in_addr *)host_entry->h_addr)); cout << "server IP is " << serverIP << endl; //创建socket并且绑定了TCP协议 int hsocket = socket(AF_INET, SOCK_STREAM, 0); //socket创建失败,一般都是系统资源没有了,或者没有权限 if (hsocket == INVALID_SOCKET) *** { cout << "Create Socket Failed::" << GetLastError() << endl; return -2; } //连接http服务器 sockaddr_in servAddr; servAddr.sin_family = AF_INET; servAddr.sin_port = htons(8081); //指定端口号 servAddr.sin_addr.S_un.S_addr = inet_addr(serverIP); if (connect(hsocket, (struct sockaddr*)&servAddr, sizeof(servAddr)) == -1) { cout << "Connect error" << endl; return -3; } else cout << "Connected "<<serverIP<<" successed!" << endl; //发出页面URL请求数据 char req[] = "?connect0"; //注意send并不能保证你指定大小的数据它能够全部发送, if (send(hsocket, req, (int)strlen(req), 0) < 0) { cout << "send request error" << endl; return -4; } cout << "sended request success!" << endl; //接收数据的缓冲,应为是字符串所以结尾要加\0,我们一开始就将它全部置0 char buffer[10000] = {0}; int len; if ( recv(hsocket, buffer, sizeof(buffer)-1, 0) <0) { cout << "read error" << endl; exit(1); } cout << buffer << endl; getchar(); return 0; } ``` ``` 这是运行结果 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395763_716349.png) 软件报错(查百度说这句话是因为读取软件数据导致的,不知正确与否) ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395434_777007.png) 对比使用浏览器通信,能直接收到反馈 ![图片说明](https://img-ask.csdn.net/upload/201903/24/1553395626_39803.png)
一道java面试题,一起研究研究
这道题是这样的,有两个字符串,比较他们中间的值是否相等.注意不是一般的相等!例如 String stra = "ccaaiub" String strb = "iubacac" 如果出现这样的情况也是相等的! 也就是说两个字符串中字符的个数相等,每个字符出现的次数也是相等的,有什么好的解决方案,考虑下效率上面的因素,因为字符串是不定长的 [b]问题补充:[/b] 如果字符串中穿插的有其它字符,比如数字123等等!给点伪代码,大家都看看!
下面代码,如果有多个最大相同子串该怎么全部打印出来??
/* * 获取两个字符串中最大相同子串。 * 思路: * 1,先判断两个字符串谁的长度大 * 2,判断较小的字符串是否为较长字符串的子串,如果是就返回较短的字符串 * 3,将较小字符串,按照 正向 和 反向 和 两边同时递减 3种方式依次递减掉1个字符,分别与较长字符串比较, 返回相同字符串长度最长的字符串并打印,如果出现相同长度的匹配字符子串,就以最大长度为参照,将符合 度的字符串全部打印。 */ public class StringTest4 { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "abcchellonvnbbbbbb...k"; String s2 = "hfkdsajlsahello,jkljlkbbbbb"; String s3 = "aaa"; String s4 = "bbb"; sop(getMaxString(s1, s2)); sop(getMaxString(s3, s4)); } public static void sop(String s) { System.out.println(s); } public static String getMaxString(String s1, String s2) { String max; String min; max = (s1.length() > s2.length()) ? s1 : s2; min = (max == s1) ? s2 : s1; sop("较长字符串为:"+max + "较短字符串为:" + min); for (int x = 0; x < min.length(); x++) { for (int y = 0, z = min.length() - x; z != min.length() + 1; y++, z++) { String temp = min.substring(y, z); if (max.contains(temp)) { return temp; } } } return "无匹配字符"; } } -------------------打印结果--------------------------- 较长字符串为:hfkdsajlsahello,jkljlkbbbbb较短字符串为:abcchellonvnbbbbbb...k hello 较长字符串为:bbb较短字符串为:aaa 无匹配字符 -------------ps------------------ 在s1和s2中有两个字符串符合最大相同的子串,但是比较后得到第一个子串"hello"方法就会结束了,怎么做到一起打印输出? 如果提供的数据有更多的最大相同子串呢?应该怎么修改程序才能把所有匹配条件的子串都输出?
请教大神们一个java包装类的问题
请教大神们一个java包装类的问题, ``` String str = "abc"; String str2 = "abc"; System.out.println(str == str2); Integer i = Integer.valueOf(1); Integer i2 = Integer.valueOf(1); System.out.println(i ==i2); ``` 我知道str和str2是存放在字符串常量池中的,所以他们是相等的,但是i和i2相等能说明这两个是同一个对象吗? 我认为i和i2相等是因为 比较它们的时候自动拆箱,按照基本数据类型来比较了, 另外关于基本类型比如int,也是类似于String常量池那样存储的吗? 就是说我有两个int值如果相等的话,它们在内存中是否就是相同的呢? 这个问题是在看 think in java 第17章 深入理解容器 时想到的,书中在将填充容器时写了一个填充Integer的自定义的List,然后说这是享元,我有点想不明白,求大神们指点呀!下面是书中的代码: ``` public class CountingIntegerList extends AbstractList<Integer> { private int size; public CountingIntegerList(int size) { this.size = size < 0 ? 0 : size; } public Integer get(int index) { //我这里不太明白,难道每次按照相同index取出的Integer都是同一个对象??? return Integer.valueOf(index); } public int size() { return size; } public static void main(String[] args) { System.out.println(new CountingIntegerList(30)); } } ```
两个java通讯程序问题
1、假设有一个客户端通过Socket连接上某个服务器,该Socket的输出流被多个线程同时共享,并同时输出若干数据,每个线程各自输出5个相同的字符串,每个线程输出的内容不同,例如线程1输出“AAAAA”,线程2输出“BBBBB”,线程3输出“CCCCC”。 服务器端接收客户端的请求数据并打印,请问服务器端接收到的数据是否都是 AAAAA,BBBBB,CCCCC这样的,还是ABCAA这样的混乱型的 2、如果一个mina做的服务端 连接了多个客户端 客户端1正在输入 10K数据的同时 其他客户端能否传输数据
在线等,Java 小白诚求编写一道很简单的算法题,立即给分
之前提过相同问题,但当时没仔细看结果就立即采纳了,刚发现答案是错的。 一道大学算法考试题,我没好好学java,现在求大神帮忙,编写出来能运行出正确结果立即采纳. 一个由N个括号组成的字符串S,开括号” ( “ 和闭括号 “ ) “ ,目标是将S分成两个部分,使得第一部分中的开放括号的数量等于第二部分中的闭合括号的数量。 更正式地说,我们正在寻找一个整数K 0 <= K <= N, S的前k个字符中的开括号的数目与S的后面 (N - K)个字符中的闭括号的数目相同。 例如,给定S = “ ( ( ) ) ) ) ( ”,K等于4,因为: S的前四个字符“ ( ( ) ) ”,包含两个开括号 S的剩余三个字符“ ) ) ( ”,包含两个闭括号。 写一个函数 class Solution {public int solution(string S); } 给定字符串S,返回满足上述条件的K的值。(K总是存在并且是唯一的)。 例如,给定S =“(( ))))(”,函数应该返回4,如上所述。 假设: N是在范围[0 ... 100,000]内的整数, 字符串S仅由字符“(” 或“ ) ”组成。
Java 小白诚求编写一道很简单的算法题
大学算法考试题,我没好好学java,现在求大神帮忙,编写出来能运行出结果马上采纳 一个由N个括号组成的字符串S,开括号” ( “ 和闭括号 “ ) “ ,目标是将S分成两个部分,使得第一部分中的开放括号的数量等于第二部分中的闭合括号的数量。更正式地说,我们正在寻找一个整数K 0 <= K <= N, S的前k个字符中的开括号的数目与S的后面 (N - K)个字符中的闭括号的数目相同。 例如,给定S = “ ( ( ) ) ) ) ( ”,K等于4,因为: S的前四个字符“ ( ( ) ) ”,包含两个开括号 S的剩余三个字符“ ) ) ( ”,包含两个闭括号。 写一个函数 class Solution {public int solution(string S); } 给定字符串S,返回满足上述条件的K的值。(K总是存在并且是唯一的)。 例如,给定S =“(( ))))(”,函数应该返回4,如上所述。 假设: N是在范围[0 ... 100,000]内的整数, 字符串S仅由字符” ( “ 或“ ) ”组成。 复杂度 预期最坏情况时间复杂度为O(N); 预期的最坏情况下的空间复杂度为O(1)(不计算输入参数所需的存储空间)。
关于java中String的对象问题
String s = "abc"; String s1 ="a"+"b"+"c"; 看有关书籍介绍说这上面两句代码内存中创建了4个对象,但是也有些资料上说是只创建了一个对象,因为编译器会把字符串常量在编译过程中直接相加? 还有就是 String a = "abc"; String c = a+"d"; String d = a+"d"; 这个时候创建了几个对象呢?为什么c和d不相等呢
小白求答,写了个猜字母的代码,可是它识别不了我的答案,求大神解惑
import java.util.Scanner; public class Guess { public static void main(String[] args) { // TODO Auto-generated method stub //第一步:定义数据结构: /*Input:*/ char[] chs = new char[5];//保存随机生成的5个字母 char[] input = new char[5];//保存用户输入的5个字母 /*Output:*/ //第几次尝试,猜对几个字母,几个字母的位置正确 int times=0,right=0,position=0; int score=0;//分数 char[] realtime=new char[5];//保存实时显示猜对位置字母的数组 /*隐含变量*/ String inStr=" ";//临时保存从控制台录入的字符串 /*process*/ generate(chs); /*打桩测试*/ for(int i=0;i<chs.length;i++){ System.out.print(chs[i]+","); } /*主程序循环*/ Scanner sc=new Scanner(System.in);//只有从控制台获得用户输入就用Scanner System.out.println("游戏开始..."); //循环 /*字符串不是基本类型,做等值比较,不能用== * 应该使用Java专门的API比较字符串是否相等 * 语法:字符串1.equals(字符串2); */ while(!inStr.equals("EXIT")&&position!=chs.length){ System.out.println("请输入5个字母,按回车继续...(exit-退出)"); //Step2:获得用户输入: /*获得用户输入的字符串:sc.next()——返回输入整个字符串 * 防止、去掉空格:字符串.trim()——去掉字符前后空格 * 将输入的字符串中所有的小写字母,统一转换为大写字母: * 字符串.toUpperCase() */ inStr=sc.next().trim().toUpperCase(); //Stpe3:判断:如果用户输入的不是exit,才继续 if(!inStr.equals("EXIT")){ //Stpe4:将字符串,转化为字符数组,保存到input数组中 //将字符串转换为字符数组的API:字符数组=字符串.toCharArray() input=inStr.toCharArray(); //Step5:比较chs和input两个数组的相似程度 //得到right:猜对几个字母 //得到position:猜对位置的有几个 //得到realtime:猜对位置的实时数组 int[] result=compare(chs,input,realtime); right=result[0]; position=result[1]; //Step6:如果没有都猜对 if(position!=chs.length){ //将尝试次数+1 times++; System.out.println("第"+times+"次尝试:"+"猜对了" +right+"个字母,"+"其中"+position+ "个位置正确"); for(int i=0;i<realtime.length;i++){ System.out.print(realtime[i]+","); } System.out.println(); } } } /*如果推出循环,只有两种情况: * 1用户输入exit,主动退出,输入欢迎下次再来 * 2用户猜对了(position==chs.length) * 计算得分:100*chs.length-10*times * 输出,恭喜你猜对了 * */ if(inStr.equals("EXIT")){ System.out.println("欢迎下次再来!"); }else{ score=100*chs.length-10*times; System.out.println("恭喜您,猜对了,本次得分:"+score); } } /** * 比较两个数组 * 1.求出猜对几个字母,有几个字母的位置正确 * 2.将比较结果分别保存在返回值数组的第一个元素和第二个元素中 * 3.将位置正确的字母在realtime中实时显示 * @param chs 随机生成的目标数组 * @param input 用户输入的数组 * @param realtime 实时显示猜对位置的元素数组 * @return 1个数:[0]保存猜对字母的个数 * [1]保存猜对位置的个数 */ public static int[] compare(char[]chs,char[]input,char[]realtime){ //数组的第一个元素[0],表示有几个相同的字母 //数组第二个元素[1],表示位置有几个相同的字母 int[] result=new int[2];//新建两个整数元素的数组 /* * 反复取出input数组中每个元素和chs数组中每个元素比较 * 只有input中的元素和chs中的元素相等 * 对result[0]+1,表示猜对了一个字母 * 立刻判断此时的位置是否相同(i==j) * 如果i==j * 对result[1]+1,表示猜对了一个位置 * 将才对的字母,填入realtime数组相同的位置 */ for(int i=0;i<input.length;i++){ for(int j=0;i<chs.length;i++){ if(input[1]==chs[j]){ result[0]++; if(i==j){ result[1]++; realtime[i]=input[i]; } break; } } } return result; } /** * 自动生成5个不重复的字母,直接保存在数组chs中 * @param chs:传入一个空数组。 * 方法内,对数组的更改,直接作用于原数组 */ public static void generate(char[] chs){ /* * 反复生成多个字母,就要用循环: * 循环变量:int i=0; * 循环条件:i<chs.length; * 迭代循环变量:无规律 * 只有生成字母不重复时,才+1! * 循环体:随机生成65~90之间的1个整数。 * 判断刚生成的整数,在数组中是否重复 * 如果没有重复,就加入数组chs中,并且i++ * (否则什么都不做,再生成一个新字母,再比较) */ //因为循环次数和迭代规律不确定,所以使用while循环 int i = 0;//定义循环变量 while(i<chs.length){ //随机生成65-90之间的整数 int r=(int)(Math.random()*(90-65+1)+65); //判断r是否在数组中包含 //定义1个布尔类型变量,表示r是否可用。默认是ture. boolean enable=true; //循环遍历数组的每个元素,和r比。 //只要任意1个元素等于r,则改变变量enable=false,表示r不可用。 for(int j=0;j<i;j++){ if(chs[j]==r){ enable=false; } } if(enable){//如果r可用 chs[i]=(char)r; i++; } } } } ``` ```
java核心技术卷一 equals方法 EqualTest.java
``` public class EqualTest { public static void main(String[] args) { Employee alice1 = new Employee("Alice Adams", 75000, 1989, 12, 15); Employee alice2 = alice1; Employee alice3 = new Employee("Alice Adams", 75000, 1989, 12, 15); Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1); System.out.println("alice1 == alice2: "+(alice1==alice2)); System.out.println("alice1 == alice3: "+(alice1==alice3)); System.out.println("alice1.equals(alice3): "+alice1.equals(alice3)); System.out.println("alice1.equals(bob): "+alice1.equals(bob)); System.out.println("bob.toString(): "+bob); Manager car1 = new Manager("Carl Cracker", 80000, 1987, 12, 15); Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15); boss.setBonus(5000); System.out.println("boss.toString(): "+boss); System.out.println("carl.equals(boss): "+car1.equals(boss)); System.out.println("alice1.hashCode(): "+alice1.hashCode()); System.out.println("alice3.hashCode(): "+alice3.hashCode()); System.out.println("bob.hashCode(): "+bob.hashCode()); System.out.println("car1.hashCode(): "+car1.hashCode()); } } import java.util.Date; import java.util.GregorianCalendar; import java.util.Objects; public class Employee { private String name; private double salary; private Date hireDay; public Employee(String n,double s,int year,int month,int day){ name = n; salary = s; GregorianCalendar calendar = new GregorianCalendar(year,month-1,day); hireDay = calendar.getTime(); } public String getName(){ return name; } public double getSalary(){ return salary; } public Date getHireDay(){ return hireDay; } public void raiseSalary(double byPercent){ double raise = salary * byPercent / 100; salary += raise; } public boolean equals(Object otherObject){ //这里获得一个对象参数,第一个if语句判断两个引用是否是同一个,如果是那么这两个对象肯定相等 if(this == otherObject) return true; //这里判断这个参数是否引用空值 if(otherObject == null) return false; //getClass()方法是得到对象的类,这里就是如果两个对象的类不一样,那么就不相等 if(getClass()!=otherObject.getClass()) return false; //在以上判断完成,再将得到的参数对象强制转换为该对象,考虑到父类引用子类的对象的出现,然后再判断对象的属性是否相同 Employee other = (Employee)otherObject; return Objects.equals(name, other.name)&&salary ==other.salary&& Objects.equals(hireDay, other.hireDay); } //哈希散列,有自己的计算方法,根据字符串来得到一段数字 public int hashCode(){ return Objects.hash(name,salary,hireDay); } //toString()方法,可自动生成 @Override public String toString() { return getClass().getName()+ "[name=" + name + ", salary=" + salary + ", hireDay=" + hireDay + "]"; } } public class Manager extends Employee { private double bonus; public Manager(String n,double s, int year,int month,int day){ super(n, s, year, month, day); bonus = 0; } public double getSalary(){ double baseSalary = super.getSalary(); return baseSalary + bonus; } public void setBonus(double b){ bonus = b; } public boolean equals(Object otherObject){ if(!super.equals(otherObject)) return false; Manager other = (Manager)otherObject; return bonus == other.bonus; } public int hashCode(){ return super.hashCode()+17*new Double(bonus).hashCode(); } public String toString(){ return super.toString()+"[bonus=]"+bonus+"]"; } } ``` 这个程序里面有一部分,是public boolean equals(object otherObject)方法, 在这个方法的return语句里面莫名其妙的出现了一个Object.equals(a,b),我不明白这个是从哪里来的,求大神解释一下。
关于java Anotation注释成员斌值问题,是不是必须为每一个注释成员斌值?
java中自定义Annotation时,是不是一定要为每一个注释成员斌值呢,不知道javax.persistence.Column注释是怎么实现的 使用javax.persistence.Column时为什么不用为每一个注释成员斌值。 本人现做一个小测验如下: 一、Validate.java,验证用的注解 package com.wanghaisheng.generator.support; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Validate { //必输字段 boolean required(); //最小长度 public abstract int minLength(); //最大长度 public abstract int maxlength(); //[3,10] 长度介于 3 和 {1} 之间的字符串 public abstract String rangelength(); //[100,1000] 只能是100和 1000 之间的值 public abstract String range(); //最小值 public abstract long min(); //最大值 public abstract long max(); //验证邮箱 public abstract boolean email(); //验证是否是合法的网址 public abstract boolean url(); //验证是否是合法的日期 new Date() 类型格式 public abstract boolean date(); //验证是否是合法的日期 年/月/日 或 年-月-日 格式 public abstract boolean dateISO(); //验证是否是合法的数字 public abstract boolean number(); //验证是否为整数 public abstract boolean digits(); //验证合法的信用卡号 public abstract boolean creditCard(); //要匹配的元素如:’#cnfpass’ , 验证两次输入值是否相同 public abstract String equalTo(); //“gif|png|jpg” 验证是否是合法后缀名的字符串 public abstract String accept(); } 然后我定义一个POJO使用该注解 二、User.java package com.wanghaisheng.model; import com.wanghaisheng.generator.support.Validate; public class User { private String userName; private String password; @Validate(accept = "", creditCard = false, date = false, dateISO = false, digits = false, email = false, equalTo = "", max = 0, maxlength = 0, min = 0, minLength = 0, number = false, range = "", rangelength = "", required = false, url = false) public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } 各位大侠,能不能邦小弟实现使用Validate注解时只为其中的几个成员斌值,或不用为他们斌值, 如: @Validate(email = true) public String getUserName() { return userName; } 而不用当使用Validate注解时加上那么一大堆难看的无用的代码。 我知道javax.persistence.Column注解是能够实现的。 大侠们,望快点伸出援手啊,小弟急啊
程序解答(Java菜鸟)!课程要求:对已给的Java程序,添加相应功能——玩家双人对战!!
**_Chessboard.java **_ /** * 棋盘对象 */ public class Chessboard { // 定义一个二维数组来充当棋盘 private String[][] board; // 定义棋盘的大小 public static final int BOARD_SIZE = 22; /** * 初始化棋盘 * * @return void */ public void initBoard() { // 初始化棋盘数组 board = new String[BOARD_SIZE][BOARD_SIZE]; // 把每个元素赋值为“十”,用于控制台输出棋盘 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { board[i][j] = "十"; } } } public void test() { Object[][] array = new Object[10][10]; for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { array[i][j] = new Object(); } } } /** * 在控制台输出棋盘的方法 */ public void printBoard() { // 打印每个数组元素 for (int i = 0; i < BOARD_SIZE; i++) { for (int j = 0; j < BOARD_SIZE; j++) { // 打印后不换行 System.out.print(board[i][j]); } // 每打印完一行数组元素就换行一次 System.out.print("\n"); } } /** * 给棋盘位置赋值 * * @param posX * X坐标 * @param posY * Y坐标 * @param chessman * 棋子 */ public void setBoard(int posX, int posY, String chessman) { this.board[posX][posY] = chessman; } /** * 返回棋盘 * * @return 返回棋盘 */ public String[][] getBoard() { return this.board; } } **_Chessman.java_** /** * 棋子枚举类 */ public enum Chessman { BLACK("●"), WHITE("○"); private String chessman; /** * 私有构造器 */ private Chessman(String chessman) { this.chessman = chessman; } /** * @return String 黑棋或者白棋 */ public String getChessman() { return this.chessman; } } **_GobangGame.java_** import java.io.BufferedReader; import java.io.InputStreamReader; /** * 五子棋游戏类 */ public class GobangGame { // 定义达到赢条件的棋子数目 private final int WIN_COUNT = 5; // 定义用户输入的X坐标 private int posX = 0; // 定义用户输入的X坐标 private int posY = 0; // 定义棋盘 private Chessboard chessboard; /** * 空构造器 */ public GobangGame() { } /** * 构造器,初始化棋盘和棋子属性 * * @param chessboard * 棋盘类 */ public GobangGame(Chessboard chessboard) { this.chessboard = chessboard; } /** * 检查输入是否合法。 * * @param inputStr * 由控制台输入的字符串。 * @return 字符串合法返回true,反则返回false。 */ public boolean isValid(String inputStr) { // 将用户输入的字符串以逗号(,)作为分隔,分隔成两个字符串 String[] posStrArr = inputStr.split(","); try { posX = Integer.parseInt(posStrArr[0]) - 1; posY = Integer.parseInt(posStrArr[1]) - 1; } catch (NumberFormatException e) { chessboard.printBoard(); System.out.println("请以(数字,数字)的格式输入:"); return false; } // 检查输入数值是否在范围之内 if (posX < 0 || posX >= Chessboard.BOARD_SIZE || posY < 0 || posY >= Chessboard.BOARD_SIZE) { chessboard.printBoard(); System.out.println("X与Y坐标只能大于等于1,与小于等于" + Chessboard.BOARD_SIZE + ",请重新输入:"); return false; } // 检查输入的位置是否已经有棋子 String[][] board = chessboard.getBoard(); if (board[posX][posY] != "十") { chessboard.printBoard(); System.out.println("此位置已经有棋子,请重新输入:"); return false; } return true; } /** * 开始下棋 */ public void start() throws Exception { // true为游戏结束 boolean isOver = false; chessboard.initBoard(); chessboard.printBoard(); // 获取键盘的输入 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String inputStr = null; // br.readLine:每当键盘输入一行内容按回车键,则输入的内容被br读取到 while ((inputStr = br.readLine()) != null) { isOver = false; if (!isValid(inputStr)) { // 如果不合法,要求重新输入,再继续 continue; } // 把对应的数组元素赋为"●" String chessman = Chessman.BLACK.getChessman(); chessboard.setBoard(posX, posY, chessman); // 判断用户是否赢了 if (isWon(posX, posY, chessman)) { isOver = true; } else { // 计算机随机选择位置坐标 int[] computerPosArr = computerDo(); chessman = Chessman.WHITE.getChessman(); chessboard.setBoard(computerPosArr[0], computerPosArr[1], chessman); // 判断计算机是否赢了 if (isWon(computerPosArr[0], computerPosArr[1], chessman)) { isOver = true; } } // 如果产生胜者,询问用户是否继续游戏 if (isOver) { // 如果继续,重新初始化棋盘,继续游戏 if (isReplay(chessman)) { chessboard.initBoard(); chessboard.printBoard(); continue; } // 如果不继续,退出程序 break; } chessboard.printBoard(); System.out.println("请输入您下棋的坐标,应以x,y的格式输入:"); } } /** * 是否重新开始下棋。 * * @param chessman * "●"为用户,"○"为计算机。 * @return 开始返回true,反则返回false。 */ public boolean isReplay(String chessman) throws Exception { chessboard.printBoard(); String message = chessman.equals(Chessman.BLACK.getChessman()) ? "恭喜您,您赢了," : "很遗憾,您输了,"; System.out.println(message + "再下一局?(y/n)"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); if (br.readLine().equals("y")) { // 开始新一局 return true; } return false; } /** * 计算机随机下棋 */ public int[] computerDo() { int posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); int posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); String[][] board = chessboard.getBoard(); while (board[posX][posY] != "十") { posX = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); posY = (int) (Math.random() * (Chessboard.BOARD_SIZE - 1)); } int[] result = { posX, posY }; return result; } /** * 判断输赢 * * @param posX * 棋子的X坐标。 * @param posY * 棋子的Y坐标 * @param ico * 棋子类型 * @return 如果有五颗相邻棋子连成一条直接,返回真,否则相反。 */ public boolean isWon(int posX, int posY, String ico) { // 直线起点的X坐标 int startX = 0; // 直线起点Y坐标 int startY = 0; // 直线结束X坐标 int endX = Chessboard.BOARD_SIZE - 1; // 直线结束Y坐标 int endY = endX; // 同条直线上相邻棋子累积数 int sameCount = 0; int temp = 0; // 计算起点的最小X坐标与Y坐标 temp = posX - WIN_COUNT + 1; startX = temp < 0 ? 0 : temp; temp = posY - WIN_COUNT + 1; startY = temp < 0 ? 0 : temp; // 计算终点的最大X坐标与Y坐标 temp = posX + WIN_COUNT - 1; endX = temp > Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1 : temp; temp = posY + WIN_COUNT - 1; endY = temp > Chessboard.BOARD_SIZE - 1 ? Chessboard.BOARD_SIZE - 1 : temp; // 从左到右方向计算相同相邻棋子的数目 String[][] board = chessboard.getBoard(); for (int i = startY; i < endY; i++) { if (board[posX][i] == ico && board[posX][i + 1] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } } if (sameCount == 0) { // 从上到下计算相同相邻棋子的数目 for (int i = startX; i < endX; i++) { if (board[i][posY] == ico && board[i + 1][posY] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } } } if (sameCount == 0) { // 从左上到右下计算相同相邻棋子的数目 int j = startY; for (int i = startX; i < endX; i++) { if (j < endY) { if (board[i][j] == ico && board[i + 1][j + 1] == ico) { sameCount++; } else if (sameCount != WIN_COUNT - 1) { sameCount = 0; } j++; } } } return sameCount == WIN_COUNT - 1 ? true : false; } public static void main(String[] args) throws Exception { GobangGame gb = new GobangGame(new Chessboard()); gb.start(); } }
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
2020 年,大火的 Python 和 JavaScript 是否会被取而代之?
Python 和 JavaScript 是目前最火的两大编程语言,但是2020 年,什么编程语言将会取而代之呢? 作者 |Richard Kenneth Eng 译者 |明明如月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: Python 和 JavaScript 是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
Idea 中最常用的10款插件(提高开发效率),一定要学会使用!
学习使用一些插件,可以提高开发效率。对于我们开发人员很有帮助。这篇博客介绍了开发中使用的插件。
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
那些年,我们信了课本里的那些鬼话
教材永远都是有错误的,从小学到大学,我们不断的学习了很多错误知识。 斑羚飞渡 在我们学习的很多小学课文里,有很多是错误文章,或者说是假课文。像《斑羚飞渡》: 随着镰刀头羊的那声吼叫,整个斑羚群迅速分成两拨,老年斑羚为一拨,年轻斑羚为一拨。 就在这时,我看见,从那拨老斑羚里走出一只公斑羚来。公斑羚朝那拨年轻斑羚示意性地咩了一声,一只半大的斑羚应声走了出来。一老一少走到伤心崖,后退了几步,突...
一个程序在计算机中是如何运行的?超级干货!!!
强烈声明:本文很干,请自备茶水!???? 开门见山,咱不说废话! 你有没有想过,你写的程序,是如何在计算机中运行的吗?比如我们搞Java的,肯定写过这段代码 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } ...
立即提问