barriers / 阅读 / 详情

java语言中不等同于用字符串怎么写?

2023-08-06 13:22:01
共1条回复
苏州马小云

修改字符串的目的是为了得到新的字符串,类String和类StringBuffer都提供了相应的方法。 1.String类提供的方法:   concat( )   replace( )   substring( )   toLowerCase( )   toUpperCase( )   ◇ public String contat(String str);   用来将当前字符串对象与给定字符串str连接起来。   ◇ public String replace(char oldChar,char newChar);   用来把串中出现的所有特定字符替换成指定字符以生成新串。

◇ public String substring(int beginIndex);

  public String substring(int beginIndex,int endIndex);   用来得到字符串中指定范围内的子串。   ◇ public String toLowerCase();   把串中所有的字符变成小写。   ◇ public String toUpperCase();   把串中所有的字符变成大写。

相关推荐

JAVA中字符串比较equals和equalsIgnoreCase的区别

equals 区分大小写equalsIgnoreCase 不区分大小写
2023-08-05 08:26:005

java中equalsignorecase怎么用?

->是成员提取, A ->B表示提取A中的成员B,A只能是指向类、结构、联合的指针常引用声明方式:const 类型标识符 &引用名=目标变量名;
2023-08-05 08:26:201

JAVA中字符串比较equals和equalsIgnoreCase的区别

equals 区分大小写 abc==ABC falseequalsIgnoreCase 不区分 abc==ABC true
2023-08-05 08:26:292

JAVA中字符串比较equals和equalsIgnoreCase的区别

解释一下==号,他比较的是一个对象在内存中的地址值,比如2个字符串对象String s1 = new String("str");String s2 = new String("str");如果用==号比较,会返回false,因为创建了两个对象,他们在内存中地址的位置是不一样的。equals的情况比较复杂,它是java.lang.Object类中的一个方法。因为java中所有的类都默认继承于Object,所以所有的类都有这个方法。在Object类源码中是这样写的。public boolean equals(Object obj) { return (this == obj);}他同样使用==号进行内存地址的比较。但是许多java类中都重写了这个方法,比如String。public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }String里的方法,如果==号比较不相等,还会进行一下值的比较。所以equals方法具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么他和==号等价。
2023-08-05 08:26:391

java 问题 要求是 输入t or T 输出true, 输入F or f 输出false

if (s.equalsIgnoreCase("T") || s.equalsIgnoreCase("F")) {这句判断了是不是T,t,F,f如果是,b = s.equalsIgnoreCase("T");判断了是不是T,并将比较结果赋值给b。
2023-08-05 08:26:553

JAVA中无视字母大小写判断是否相等的方法是什么

public boolean equalsIgnoreCase(String anotherString)
2023-08-05 08:27:174

if(e.getMessage().equalsIgnoreCase("zero")) 唔该:给个详细讲解

条件判断:条件为 从对象e的getMessage方式取出String字符串,判断这个字符串是否是zero(忽略大小写)!
2023-08-05 08:27:252

Java IF (A和B)或(A和C)要怎么写?

if (A && (b || c)) { // true} else { // false}
2023-08-05 08:27:333

java 输入字母判断是否为元音字母

为什么不用正则表达式,没有什么比这个更简单吧,为什么不用最佳解决方案
2023-08-05 08:27:423

java中,String的trim().equalsIgnoreCase(),两个方法各有什么作用

Stringtrim()//截去字符串两端的空格,但对于中间的空格不处理。java.lang.String.equalsIgnoreCase()这个方法比较字符串到另一个字符串,忽略大小写的考虑
2023-08-05 08:27:491

求助!equalsIgnoreCase()括号参数问题!

答案:new String(name,0,0,4)new String(输入的bytes字节, 16位Unicode字符的前8位的值, 偏移量, 字节数)
2023-08-05 08:27:561

C#中有没有和java中equalsIgnoreCase一样的方法来比较字符串?

假设要比较的字符串为s1,s21.string.Equals(string1, string2, StringComparison.OrdinalIgnoreCase) 这就相当于java的equalsIgnoreCase() 但它是静态方法 并不由要比较的字符串调用,避免了null异常2.s1.ToLower()==s2.ToLower() 这个方法可能引发null异常 必须保证两个字符串都不为空 而且效率较低
2023-08-05 08:28:071

str.equalsIgnoreCase("null") ? "" : str; 意思是str等于null或""时为str吗?

str == null ?"":str;str.equalsIgnoreCase("")?"":str;equalsIgnoreCase(null)这样写会抛异常吗?会抛出异常可以这样写:(str == null || str.equalsIgnoreCase("") ) == true ? "":str;
2023-08-05 08:28:141

我在本机上,想写一个java程序获取我本机的外网ip地址,如何搞

private String getIpAddr() { String ipAddress = null; //ipAddress = this.getRequest().getRemoteAddr(); ipAddress = this.getRequest().getHeader("x-forwarded-for"); if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getHeader("Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getHeader("WL-Proxy-Client-IP"); } if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = this.getRequest().getRemoteAddr(); if(ipAddress.equals("127.0.0.1")){ //根据网卡取本机配置的IP InetAddress inet=null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress= inet.getHostAddress(); } } //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照","分割 if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15 if(ipAddress.indexOf(",")>0){ ipAddress = ipAddress.substring(0,ipAddress.indexOf(",")); } } return ipAddress; }
2023-08-05 08:28:232

用java编写在一年中,任意输入一个月份,判断是属于哪个季节

int month = new Scanner(System.in).nextInt(); String s=(month>1&&month<=3)?"Spring":month<=6?"Summer":month<=9?"Autumn":month<=12?"Winter":"must be between 1 and 12"; System.out.println(s);
2023-08-05 08:28:333

·什么是字符串值怎么赋它的值呀

字符串值就是该字符串的值,如果想赋值直接赋值就可。
2023-08-05 08:28:552

Java中判断字符串相等不区分大小写的方法?

.equalsIgnoreCase()
2023-08-05 08:29:042

我在获得客户端ip的时候,获得的ip地址为0:0:0:0:0:0:0:1

像断了一样像断了一样
2023-08-05 08:29:155

字符串怎么比较大小?

java中两个字符串如何比较大小 有三种方法实现 第一种直接用字符串类的pareTo方法: String t1="20131011"; String t2="20131030"; int result = t1pareTo(t2);第二种是把这个日期字符串转换成long: SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); Date d1 = sdf.parse(t1); Date d2 = sdf.parse(t2); long result = d1.getTime()-d2.getTime();第三种是把日期字符串转换成整形int:int int1 = Integer.parseInt(t1); int int2 = Integer.parseInt(t2); int result = int1-int2;注:result大于0,则t1>t2; result等于0,则t1=t2; result小于0,则t1 字符串大小比较的规则? 比较的时候,从字符串左边开始,一次比较每个字符,直接出现差异、或者其中一个串结束为止。 比如ABC与ACDE比较,第一个字符相同,继续比较第二个字符,由于第二个字符是后面一个串大,所以不再继续比较,结果就是后面个串大。 再如ABC与ABC123比较,比较三个字符后第一个串结束,所以就是后面一个串大。 所以,长度不能直接决定大小,字符串的大小是由左边开始最前面的字符决定的。 java怎么比较字符串大小? 比较两个字符串的的大小 str1和str2分别是两个字符串str1==str2或者是 str1.equals(str2)如果要是两个字符串忽略大小写的话用 str1.equalsIgnoreCase(str2)也可以是 str1pareTo(str2) 第二个用加号连接起来就可以了 C语言中字符串的大小指的是什么 以字符是ASCII值确定,憨较规则是,从第一个字符开始,顺次向后直到出现不同的字符为止,然后以第一个不同的字符的ASCII值确定,例如上面的”abc”和"aabdfg",由于第一个字符相同,都是"a"所以看下一个字符,第二个字符,一个是"b",一个是‘a",由于b的ASCII值比a的ASCII值大,所以,这二个字符串的比较结果是"abc">"aabdfg" c语言中比较字符串的strcmp函数是怎么比较大小的? strcmp(s1,s2) 对两个字符串进行比较,逐一比较字符的ascii码,a为97,A为65 所以a>A;分出大小后面不再比较; 如果s1>s2,返回1; 如果s1=s2,返回0; 如果s1 在C语言中字符串的大小怎么比较啊? strcmp 原型:extern int strcmp(char *s1,char * s2); 用法:#include 功能:比较字符串s1和s2。 说明: 当s1 当s1=s2时,返回值=0 当s1>s2时,返回值>0 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇 ""为止。如: "abcdefg"和"12",首先比较"a"和"1","a"的ASC码是97,"1"的ASC码是49,所以"abcdefg"> "12",返回值是97-49=48 "abc"和"ABC",首先比较"a"和"A","a"的ASC码是97,"A"的ASC码是65,所以"abc"> "ABC",返回值是97-65=32 "1000"和"2",首先比较"1"和"2","1"的ASC码是49,"2"的ASC码是50,所以"1000"< "2",返回值是49-50=-1 字符串大小比较 如果单纯比较长度,直接调用类似于strlen()之类的函数就可以,加以比较即可. 如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小. 参考wpyz/noip/11-1.asp 在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较, 1.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值 则 继续比较下一位 2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值 则 输出结果:1,表示字符串1 > 字符串2; 3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位的ASCII码值 则 输出结果:-1 表示字符串1 < 字符串2; 4.如果 每一位的ASCII码值都相等,而且长度相同, 则 输出结果:0 表示字符串1 == 字符串2; 5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较, 则 字符串1 原因是,到第5位时,字符串1的ASCII值是0,而字符串2的ASCII值为"e",即十进制的101,当然是字符串2大了. 具体到 cds和lesoqd 从第一位开始,"c"和"l"比较,当然是"c" < "l"了,所以,"cds" < "lesoqd" 常用的几位ascii的顺序从小到大为: 0..9, A..Z, a..z. 谁编个比较2个字符串大小的程序 我这个简单 #include bi(char a[],char b[]) { int x,y; x=0; y=0; while(a[x]==b[x]&&a[x]!="") x++; if(a[x]==""&&b[x==""]) y=0; else y=a[x]-b[x]; if(y==0) printf(" s1=s2 "); else if(y>0) printf(" s1>s2 "); else printf(" s1 } void main() { char s1[100],s2[100]; gets(s1); gets(s2); bi(s1,s2); } C++字符串比较大小 字符串的比较是逐个相应字符进行比较(比较他们的ASCII码),直到有两个字符不相等为止,ASCII码大的字母所在字符串就大,与字符串长度无关。对两个相等长度的字符串,若每个字符都比较完毕后仍相等,则两字符串相等;对不等长的字符串,若当短的字符串比较完毕时所有字符仍相等,则长度较长的字符串大!
2023-08-05 08:29:311

使用http动词篡改的认证旁路

第一种办法:在/opt/IBM/HTTPServer/conf 下的httpd.conf也就是apache的配置文件.加上如下代码<Location /> <LimitExcept GET POST HEAD CONNECT OPTIONS>Order Allow,DenyDeny from all </LimitExcept> </Location> LimitExcept 后面写的是允许经过的http方法,我这边是was8.5默认的put和delete、trace方法是禁止的,head方法好像默认不禁止,你在这里写上LimitExcept GET POST只允许post和get方法也没用,head照样可以走,我猜想是在was8.5本身默认禁止和不禁止的配置上加这些代码的吧。第二种方法:在程序中加过滤器,我是Struts1 ,针对每一个请求都加上过滤器,使用request.getMethod方法判断,除了get,post , head,connect ,options之外的方法都直接return就行了,如下所示。if(method.equalsIgnoreCase("post")||method.equalsIgnoreCase("get")||method.equalsIgnoreCase("head")||method.equalsIgnoreCase("trace")||method.equalsIgnoreCase("connect")||method.equalsIgnoreCase("options")){}
2023-08-05 08:29:451

急求,请教下各位,为什么用request.getRemoteAddr()获取的Ip都不是真实的

你是取IP、转域名、再取IP的吧
2023-08-05 08:29:532

JAVA问题[天气]

public static void main(String[] args) { System.out.println("请输入:"); try { char w = (char) System.in.read(); while (w != "n") { if (w == "D") { System.out.println("干燥"); w = (char) System.in.read(); } else if (w == "M") { System.out.println("啊啊"); w = (char) System.in.read(); } else if (w == " ") { w = (char) System.in.read(); } else { System.out.println("请输入:"); w = (char) System.in.read(); } } } catch (Exception e) { e.printStackTrace(); } }
2023-08-05 08:30:002

java截取字符串:分别截取字符串str1和str2中的部分内容,如果截取后的子串相同(不区分大小写)会输出

楼上的说法都很正确,我就不用再回答了
2023-08-05 08:30:095

在百度知道上找到了网友的java石头剪刀布游戏的代码,但是理解不来,希望大神能帮我把程序每句话都注释

public class Test { private static Scanner sc; private static Random rad; private static final String[] FINGERS = { "剪刀", "石头", "布" }; private static int win = 0, loose = 0, draw = 0; public static void main(String[] args) { // 捕获用户输入类 sc = new Scanner(System.in); //产生随机数的类 rad = new Random(); //一进来就让用户输入开始游戏,直到输入E, 退出游戏。 while (true) { System.out.println("~~~~~~~~~~~~剪刀石头布游戏,输入E可以退出~~~~~~~~~~~"); System.out.println("请选择你要出什么?Z——剪刀,X——石头,C——布"); //获取用户输入的字符 String command = sc.nextLine(); //输入字符转换 手势没发比较大小 就把字符转换成数字比较大小 int playerFinger = getValue(command); if (playerFinger == -1) {//用户输入的是E ==> -1 表示退出 break; } else if (playerFinger == 3) {//用户输入的是 E Z X C 之外的字符 ==> 3 表示输入的不是合法的,然后继续让用户重新输入 System.out.println("输入错误,请参考说明!"); continue; } //当用户输入 ZXC 中的字符时才会到这一步 //用户的输入转换成了 0,1,2 //finger[0]="剪刀" finger[1]="石头" finger[2]="布" 程序第一行定义好的 System.out.println("你出的是" + FINGERS[playerFinger]); //生成随机整数 3以内的(1,2,3) int cpuFinger = rad.nextInt(3); //finger[0]="剪刀" finger[1]="石头" finger[2]="布" 程序第一行定义好的 System.out.println("计算机出的是" + FINGERS[cpuFinger]); //比较两个数字,你可以理解 0 就是剪刀,1是石头 2 是布 int result = playerFinger - cpuFinger; if (0 == result) {//结果等于零说明两个数字一样 System.out.println("平局!"); draw++; } else if (-1 == result || 2 == result) {// 0-1=-1,1-2=-1,2-0=2 表示你输的三种情况 ;0 就是剪刀,1是石头 2 是布 System.out.println("你输了!"); loose++; } else {//剩下的情况除了平局,输局 肯定就是你赢了 System.out.println("你赢了!"); win++; } } System.out.println("游戏结束! 游戏统计次数"); System.out.println(String.format("赢:%d 输:%d 平局:%d", win, loose, draw)); } /** * 用户输入字符进行转换 * 输入字符 E 就返回-1 作为后续判断,表示退出程序 * 输入字符 Z 返回 0 代表剪刀 * 输入字符 X 返回 1 代表石头 * 输入字符 C 返回 2 代表布 * 输入其他字符 返回3 ,表明输入的不是符合规则的手势(0,1,2) * * @param command * @return */ private static int getValue(String command) { if (command.equalsIgnoreCase("E")) { return -1; } if (command.equalsIgnoreCase("Z")) { return 0; } if (command.equalsIgnoreCase("X")) { return 1; } if (command.equalsIgnoreCase("C")) { return 2; } return 3; }}
2023-08-05 08:30:231

求助!建立一个学生信息结构体数组,包括学号num,姓名name[10],年龄age,性别sex。

Java中不存在结构体,您说的是定义一个类吧?如果是的话,示例代码如下。解决方案思路如下:实现一个类Student,包含四个属性(num,name,age,sex),具体代码如下:/*** 学生类.** @author xxxx*/public class Student {private String num;private String name;private int age;private String sex;public String getNum() {return num;}public void setNum(String num) {this.num = num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return this.num + " " + this.name + " " + this.age + " " + this.sex;}}实现stat函数,该函数遍历,统计,具体代码如下:public static void stat(List<Student> studentList) {int mCount = 0;int fCount = 0;int ageLessThanEighteenCount = 0;for (Student student : studentList) {if ("f".equalsIgnoreCase(student.getSex())) {fCount++;} else if ("m".equalsIgnoreCase(student.getSex())) {mCount++;}if (student.getAge() < 18) {ageLessThanEighteenCount++;}}System.out.println("boy girl age<18");System.out.println(mCount + " " + fCount + " " + ageLessThanEighteenCount);}实现输入输出的main函数,具体代码如下:public static void main(String[] args) {List<Student> studentList = new ArrayList<>();System.out.println("请输入学生信息:");//new构造InputStreamReader对象InputStreamReader is = new InputStreamReader(System.in);//拿构造的方法传到BufferedReader中,此时获取到的就是整个缓存流BufferedReader br = new BufferedReader(is);try {while (studentList.size() < 4) {String info = br.readLine();String[] items = info.split(" ");Student student = new Student();student.setNum(items[0]);student.setName(items[1]);student.setAge(Integer.parseInt(items[2]));student.setSex(items[3]);studentList.add(student);if (studentList.size() == 4) {System.out.println("num name age sex");for (Student item : studentList) {System.out.println(item);}stat(studentList);}}} catch (IOException e) {e.printStackTrace();}}但愿可以解决您的问题。有问题直接留言。
2023-08-05 08:30:551

Java编程题 查询高考录取分数线?

import java.util.Scanner; public class test{public static void main(String[] args) {String choose="";int score=0;boolean bFlag = false; //只打印正确的选择System.out.println("请输入要查询的分数线(比如民办本科、艺术类本科、体育类本科、二本、一本):");choose = new Scanner(System.in).next();if (choose.trim().equalsIgnoreCase("民办本科")) {bFlag = true;score = 350;}else if (choose.trim().equalsIgnoreCase("艺术类本科")) {bFlag = true;score = 290;}else if (choose.trim().equalsIgnoreCase("体育类本科")) {bFlag = true;score = 280;}else if (choose.trim().equalsIgnoreCase("二本")) {bFlag = true;score = 445;}else if (choose.trim().equalsIgnoreCase("一本")) {bFlag = true;score = 555;}if (bFlag==true) {System.out.println(choose+"录取分数线: "+score+"分");}else {System.out.println("对不起,你的输入不正确!");}}}
2023-08-05 08:31:042

java中如何输入yes和no运行不同的代码

public static void main(String[] args) { Scanner input = new Scanner(System.in); do{ System.out.println("..."); System.out.println("Input YES to continue or NO to break:"); }while(input.next().equalsIgnoreCase("YES"));}
2023-08-05 08:31:221

高分求救程序题:有12个评委。评分按照 去掉一个最高分,去掉一个最低分,取平均分。从而求出选手的成绩。

随便什么语言吗?
2023-08-05 08:31:364

JAVA代码如何用继承提取出重复代码,优化代码冗余

把方法移到父类中去。
2023-08-05 08:31:475

那位大哥帮忙修改一下这段代码?

嗯。。看不懂。偶是新新手
2023-08-05 08:32:055

java将用户从键盘输入的每行数据都显示输出,遇到输入exit字符串,程序运行结束.

告诉你一个想法,设置三个变量表示数字,字母和其他字符。使用输入流。每个输入字符,判断这个字符的asc码,尽可能多的字母,数字的号码的数量。根据每次的一个相应的变量1,最后的输出变量,分别
2023-08-05 08:32:273

java中equalsignorecase怎么用?

equalsIgnoreCasepublic boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 进行比较,不考虑大小写。如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。 在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1 和 c2 这两个字符相同。 这两个字符相同(使用 == 运算符进行比较)。 对每个字符应用方法 Character.toUpperCase(char) 产生相同的结果。 对每个字符应用方法 Character.toLowerCase(char) 产生相同的结果。参数:anotherString - 与此 String 进行比较的 String。 返回:如果参数不为 null,且这两个 String 在忽略大小写时相等,则返回 true;否则返回 false。另请参见:equals(Object), Character.toLowerCase(char), Character.toUpperCase(char)
2023-08-05 08:33:111

java 输入字母判断是否为元音字母

为什么不用正则表达式,没有什么比这个更简单吧,为什么不用最佳解决方案
2023-08-05 08:33:293

用Java语言编写剪刀石头布,效果如下

public static void main(String[] args) {System.out.println("游戏开始");for (int i = 0; i < 3; i++) {int r=((int) (Math.random()*3+1));//系统产生一个1-3的随机数System.out.println("请输入数字1-3【1:剪刀 2:石头3:布】");Scanner scan=new Scanner(System.in);int q=scan.nextInt();//用户输入一个数字if(q==r) System.out.println("平局");if(q>r) System.out.println("你赢啦");if(q<r) System.out.println("你输啦");}}
2023-08-05 08:33:471

java equals区分大小写吗

区分,有一个不区分的,equalsIgnoreCase boolean equals(Object anObject) 将此字符串与指定的对象比较。 boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。
2023-08-05 08:33:551

java题目 星期转换成数字

public static String parseWeek(String str){ if("mon".equals(str.toLowerCase())){ return "一"; } else if("tue".equals(str.toLowerCase())){ return "二"; } else if("wed".equals(str.toLowerCase())){ return "三"; } else if("thu".equals(str.toLowerCase())){ return "四"; } else if("fri".equals(str.toLowerCase())){ return "五"; } else if("sat".equals(str.toLowerCase())){ return "六"; } else if("sun".equals(str.toLowerCase())){ return "日"; }else{ return "无法识别您输入的日期"; } }
2023-08-05 08:34:131

java问题

楼上正解 呵呵
2023-08-05 08:34:232

几个Java小游戏代码

http://b.faloo.com/f/342075.html?pid=62538
2023-08-05 08:34:345

为什么用request.getRemoteAddr获得的全是127.0.0.1

获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。  经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。  于是可得出获得客户端真实IP地址的方法一:public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }   获得客户端真实IP地址的方法二:public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }   可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢?  答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100用户真实IP为: 192.168.1.110
2023-08-05 08:34:511

插入unicode控制字符里面的那些英文都是什么意思?

来说有些类似于字符的数组。在java这个面向对象的语言中,字符串,无论是常量还是变量,都是用类的对象来实现的。程序中需要用到的字符串可以分为两大类:(1)、一类时创建之后不再做修改和变动的字符串常量;(2)、另一类时创建之后允许再做修改和变化的字符串变量。对于字符串常量,由于程序中经常需要对它做比较、搜索之类的操作,所以通常把它放在一个具有一定名称的对象之中,由程序对该对象完成上述操作。在java中,存放字符串常量的对象属于String类。对于字符串变量,由于程序中经常需要对它做添加、插入、修改之类的操作,所以一般都存放在StringBuffer类的对象中。1 String类字符串常量用String类的对象表示。在前面的程序中,以多次使用了字符串常量。这里首先强调一下字符串常量与字符常量不同。字符常量是用单引号括起的单个字符,例如"a"," "等。而字符串常量是用双引号括起的字符序列,例如”a”,” ”,”Hellow ”等。Java中的字符串常量,表面上与其他语言中的字符串常量没有什么不同,但在具体实现上却有较大的差异。Java的字符串常量,通常是作为String类的对象存在,由专门的属性来规定它的长度。实际上,对于所有用双引号括起的字符串常量,系统会把它创建一个无名的String类型对象。 (1)、创建字符串常量string对象由于string类的对象表示的是字符串常量,所以一般情况下,一个String字符串一经创建,无论其长度还是其内容,都不能够再更改了。因而,在创建String对象时,通常需要向String类的构造函数传递参数来指定所创建的字符串内容。下面简单列出string类的构造函数及其使用方法。(1)pulic String()这个构造函数用来创建一个空的字符串常量。(2)public String(String value)这个构造函数利用一个已经存在的字符串常量创建一个新的String对象,该对象的内容与给出的字符串常量一致。这个字符串常量可以是另一个String对象,也可以是一个用双引号括起来的直接常量。(3)public string(stringBuffer buffer)这个构造函数利用已经存在的字符数组的内容初始化新建的String对象。创建string对象与创建其他类的对象一样,分为对象的声明和对象的创建两步。这两步可以分成两个独立的语句,也可以在下一个语句中完成。例如下面的句子仅声明一个String对象s:String s;此时s的值为null,要想使用s ,还必须为它开辟内存空间。String s=new String ("ABC");这样,通过调用上面的第二个构造函数,字符串s被置为"ABC"。上述两个语句也可以合并成一个语句如下:String s=new String ("ABC");在java中,还有一种非常特殊而常用的创建String对象的方法。这种方法直接利用双引号括起来的字符串常量为新的String对象“赋值”:String s="ABC";其实这里的“赋值”只是一种特殊的省略写法,前面已经提到,java系统会自动为每一用双引号括起来的字符串常量创建一个String对象,所以这个语句的实际含义与效果与前一个句子完全一致。2、字符串产量的操作String类中所包含的字符串常量的操作很多,如:求字符串的长度。具体方法如下:public int length();用它可以获得当前字符串对象中字符的个数。例如运行下面的代码:String s="Hello!"System.out.println(s.length());屏幕将显示6,因为字符串"Hello!"的长度为6。需要注意的是在java中,因为每个字符都是占用16个比特的Unicode字符,所以汉字与英文或其他符号相同,也只用一个字符表示就足够了。如果把上面的字符串替换为“近来身体好吗”,则字符串的长度不变,仍然是6。3、判断字符串的前缀和后缀public boolean startsWith(String prefix);public boolean endsWith(String prefix);这两个方法可以分别判断当前字符串的前缀和后缀是否是字符子串。区分字符串的前缀及后缀在某些情况下是非常有用的操作。又例如,居民身份证号码的最后一位代表了居民的性别,奇数为男性,偶数为女性。假设String对象s是某位居民的身份证号码,则下面语句将判断出它的性别:if(s.endsWith("0")||s.endsWith("2")||s.endsWith("4")||s.endsWith("6")||s.endsWith("8")){ System.out.println("此人是女性");}startWith和endWith这两个方法的一个突出优点是不限制所判断的前缀、后缀的长度。例如前一个例子中若需判断的前缀从“6278”变换到“627”,则原方法仍然有效,不需要更改程序。4、字符串中单个字符的查找public int indexOf(int ch);public int indexOf(int ch,int fromIndex);上述两个方法查找当前字符串中某个特定字符出现的位置。第一个方法查找字符ch在当前字符串中的一次出现的位置,即从头向后查找,并返回字符ch出现的位置。如果找不到则返回-1。例如下面的语句将把值0赋给整型量idx:String s="java是面向对象的语言,javaScript是脚本语言";int idx=s.indexOf((int)"J");第二个方法查找字符ch时,在当前字符串中自fromIndex位字符之后向后查找,并返回该字符首次出现的位置。下面语句将查找处指定字符在字符串中的所有出现位置:String s="java是面向对象的语言,javaScript是脚本语言";int i=-1;do{ i=s.indexOf((int)"a",i++); system.out.print(i+" ");}while(i!=-1);运行结果是:1 3 14 16 -1下面的两个方法也是查找字符串中单个字符的方法,不同的是它们从字符串的结尾向字符串的开始部分查找,这里就不再举例了。public int lastIndexOf(int ch);public int lastIndexOf(int ch,int fromIndex);5、字符串中子串的查找public int indexOf(string str);public int indexOf(string str,int fromIndex);public int lastIndexOf(string str);public int lastIndexOf(string str,int fromIndex);在字符串中查找字符子串与在字符串中查找单个字符非常相似,也有四种可供选择的方法,它就是把查找单个字符的四个方法中指定的字符ch换成了指定字符串str。下面的例子从字符串尾部向前,顺序查找所有子串出现的位置:String s="java是面向对象的语言,javaScript是脚本语言";String sub="语言";for (int i=s.length();i!=-1){ i=s.lastIndexOf(sub,i-1); system.out.print(i+" ");}上述程序运行的结果是:26 10 -1另外,还定义有获取字符串中的某个字符的方法:public char charAt(int index);这个方法获取当前字符串第index个字符并返回这个字符(index从0算起)。6、比较两个字符串public int conpareTo(string anotherString);public boolean equals(Object anObject);public boolean equalsIgnoreCase(string anotherString);String类中有三个方法可以比较两个字符串是否相同。方法equals是重载Object类的方法,它将当前字符串与方法的参数列表中给出的字符串乡比较,若两字符串相同,则返回其真值,否则返回假值。方法equalsIgnoreCase与方法equals的用法相似,只是它比较字符串时不计字母大小写的差别。例如,在下面的语句中,分别用equals方法和equalsIgnoreCase方法比较两字符串,则在第一语句中由于区分大小写,所以比较结果为假,而在第二个语句中由于不区分大小写,所以比较结果为真:string s1="Hello!World"; s2="hello!world";boolean b1=s1.equals(s2);boolean b2=s1.equalsIgnoreCase(s2);比较字符串的另一个方法是compareTo(),这个方法将当前字符串与一个参数字符串乡比较,并返回一个整型量。如果当前字符串与参数字符串完全相同,则compareTo()方法返回0;如果当前字符串按字母序大与参数字符串,则compareTo()方法返回一个大于0的整数;反之,若compareTo()方法返回一个小于0的整数,则说明当前字符串按字母序小与参数字符串。在下面的例子中,compareTo比较了三对字符串。String s="abc",s1="aab",s2="abd",s3="abc";int i,j,k;i=s.compareTo(s1);j=s.compareTo(s2);k=s.compareTo(s3);语句执行的结果是分别给i,j,k三个变量赋值1,-1,0。7、连接字符子串public String concat(String str);这个方法将参数字符串连接在当前字符串的尾部,并返回这个连接而成的长字符串,但是当前字符串本身并不改变。如下面的例子:String s="Hello!";System.out.println(s.concat("World!"));System.out.println(s);运行结果是:Hello!World! //连接后的新字符串Hello! //原字符串没有改变2 StringBufferjava中用来实现字符串的另一个类是 StringBuffer类,与实现字符串常量的String类不同,StringBuffer类的对象可以扩充和修改的字符串变量。(1)、创建字符串变量-- StringBuffer对象由于 StringBuffer表示的事可扩充、修改的字符串,所以在创建 StringBuffer类的对象时并不一定要给出初值。 StringBuffer类的构造函数有以下几个:public StringBuffer();public StringBuffer(int length);public StringBuffer(String str);第一个函数创建了一个空的 StringBuffer对象。第二个函数给出了新建的 StringBuffer对象的长度,第三个函数利用一个已经存在的字符串String对象来初始化StringBuffer对象。下面语句是用三种不同的方法创建字符串的例子。StringBuffer MyStrBuff1=new StringBuffer();StringBuffer MyStrBuff2=new StringBuffer(5); StringBuffer MyStrBuff3=new StringBuffer("Hello,Guys!");需要注意的是,其中第一个对象MyStrBuff1并没有相应的内存单元,需扩充之后才能使用。(2)、字符串变量的扩充、修改与操作StringBuffer类有两组用来扩充其中所包含的字符的方法,分别是:public StringBuffer append(参数对象类型 参数对象名);public StringBuffer insert(int 插入位置,参数对象类型 参数对象名);append方法将指定的参数对象转化成字符串,附加在StringBuffer字符串之后,而insert方法则在指定的位置插入给出的参数对象所转化而得的字符串。附加或插入的参数对象可以使各种数据类型的数据,如int,double,char,String等。参看下面的例子:StringBuffer MyStrBuff1=new StringBuffer();MyStrBuff1 append("Hello,Guys!");System.out.println(MyStrBuff1.toString());MyStrBuff1.insert(6,30);System.out.println(MyStrBuff1.toString());上述执行的结果是:Hello,Guys!Hello,30 Guys!需要注意的是,若希望StringBuffer在屏幕上显示出来,则必须首先调用toString方法把它变成字符串常量,因为PrintStream的方法println()不接受StringBuffer类型的参数。StringBuffer还有一个较有用的方法来修改字符串:public void setCharAt(int index,char ch);这个方法可以将指定位置的字符用给定的另一个字符来替换。例如下面的语句将愿意为“山羊”的字符串变成“外套”:StringBuffer MyStrBuff=new StringBuffer("goat");MyBuff.setCharAt(0,"c");(3)、字符串的赋值和加法字符串是经常使用的数据类型,为了编程方便,java编译系统中引入了字符串的加法和赋值。参看下面的例子:String MyStr="Hello,";MyStr=MyStr+"Guys!";这两个语句出看似乎有问题,因为String是可变的字符串常量,实际上它们是合乎语法规定的,分别相当于:String MyStr=new StringBuffer().append("Hello").toString();MyStr=new StringBuffer().append(MyStr).append("Guys!").toString();由于这种赋值和加法的简便写法非常方便实用,所以在实际编程中用的很多。3 Java Application命令行参数Java Application是用命令行来启动的,命令行参数就成为向Java Application传入数据的常用而有效的手段。现通过下例来考察如何使用命令行参数。见例程UseComLParameter.java该例的功能是从命令行利用命令行参数读入两个整数,再把它们相乘后输出。假设将上述程序保存为一个 UseComLParameter.java文件,经编译后生成 UseComLParameter.class文件,则执行这个程序的命令行应该是如下格式:java UseComLParameter 52 -4这里,java是用来运行字节码的java解释器,UseComLParameter是所运行的字节码文件名(即所执行的类名),52和-4分别是两个命令行参数。可以看出,java的命令行参数跟在命令行主类名的后面,参数之间用空格分隔。如果命令行参数本身就带有空格,则可以用双引号将整个参数括起来以示区别,例如“a dog”就是一个完整的命令行参数。Java Application程序中用来接受命令行参数的数据结构的是main()方法的参数args[],这个参数是一个字符串数组,其中的每个元素都是一个字符串,这些字符串来自于用户与类名同时输入的命令行参数,每个字符串保存一个命令行参数供程序使用,用户输入了几个命令行参数,数组args[]就有几个元素。另外需要注意的是,所有命令行参数都以字符串String类型的对象形式存在,如果希望把参数作为其他类型的数据使用,则还需要作相应的类型转换。 可见,命令行参数是提供该整个程序的参数,每次运行时使用不同的命令行参数,就有不同的运行结果;使用命令行参数可以提高程序的灵活性和适应性。不过在使用命令行参数时要注意数组越界问题,程序运行是系统将自动检查用户输入了多少个命令行参数并逐个地保存在args[]中,但是如果程序不检查用户到底数入了多少个命令行参数而直接访问args[]某下标地数组元素,则可能造成数组越界异常。
2023-08-05 08:35:191

jsp中我用request.getRemoteAddr()获取ip地址得到的是0:0:0:0:0:

请求客户端是不是用代理了?如果用了代理就不能这么获取了. public String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
2023-08-05 08:36:071

transfer-encoding和content-length的不同实现

前段时间在项目中看到如下的代码: HttpServletResponse response = (HttpServletResponse)servletResponse; response.setHeader("Transfer-Encoding", "utf8"); filterChain.doFilter(servletRequest, servletResponse);原意是想对输出的内容进行编码,却用错了响应头,结果这个错误的响应头对后面的客户端程序带来了许多麻烦。这里有必要对这个这块的内容进行详细地了解。 传输数据编码:Transfer-Encoding数据编码,即表示数据在网络传输当中,使用怎么样的保证方式来保证数据是安全成功地传输处理。可以是分段传输,也可以是不分段,直接使用原数据进行传输。 有效的值为:Trunked和Identity. 传输内容编码:Content-Encoding内容编码,即整个数据信息是在数据器端经过怎样的编码处理,然后客户端会以怎么的编码来反向处理,以得到原始的内容。这里的内容编码主要是指压缩编码,即服务器端压缩,客户端解压缩。 可以参考的值为:gzip,compress,deflate和identity。 传输内容格式:Content-Type内容格式,即接收的数据最终是以何种的形式显示在浏览器中。可以是一个图片,还是一段文本,或者是一段html。内容格式额外支持可选参数,charset,即实际内容的字符集。通过字符集,客户端可以对数据进行解编码,以最终显示可以看得懂的文字(而不是一段byte[]或者是乱码)。3种描述信息,可以由下图来表示(来源于《Http权威指南》): 从上文中,可以看出,实际上原filter中的内容可能是想表达以下的意思: response.setContentType("text/html;charset=UTF8");//或者response.setContentType("application/json;charset=UTF8");内容长度:Content-Length内容长度,即表示整个传输内容的有效长度信息。客户端可以通过此头信息来判断接收的数据是否已经完全接收。此编码和transfer-encoding相冲突,因为transfer-encoding会通过额外的处理方式来改变数据的组织方式,就会改变实际的数据长度,如果客户端仍按照原content-length来处理的话,则不会接收到完整的数据。 由于transfer-encoding和content-length之间存在冲突问题,因此在服务端和客户端就会有相应的实现来支持相应的数据处理。整个处理过程按照RFC 2616来处理。 处理规则:(http://tools.ietf.org/html/rfc2616#page-119所述) If a Content-Length header field (section 14.13) is present, its decimal value in OCTETs represents both the entity-length and the transfer-length. The Content-Length header field MUST NOT be sent if these two lengths are different (i.e., if a Transfer-Encoding header field is present). If a message is received with both a Transfer-Encoding header field and a Content-Length header field, the latter MUST be ignored.即通常使用content-length来表示内容长度。但如果存在transfer-encodig时,就不能再使用content-length了,而且也不应该再出现content-length头。既使服务器端同时有2个头信息,content-length也应该被忽略。 服务器端实现Tomcattomcat在实现transfer-encoding时默认采用trunked传输,但如果应用指定追加了content-length,则会使用content-length的值,就不再追加transfer-encoding了。相应的实现在类AbstractHttp11Processor方法prepareResponse中(tomcat7.0.52版本): //先判断是否存在,contentLength头,即应用调用setContentLength方法,如果调用了。这里获取的值肯定不为-1long contentLength = response.getContentLengthLong(); boolean connectionClosePresent = false; if (contentLength != -1) { headers.setValue("Content-Length").setLong(contentLength);//因为使用了content-length,所以在数据传输时,就不再进行额外处理了,直接将原数据输出至客户端即可。 getOutputBuffer().addActiveFilter (outputFilters[Constants.IDENTITY_FILTER]); contentDelimitation = true; } else { // If the response code supports an entity body and we"re on // HTTP 1.1 then we chunk unless we have a Connection: close header connectionClosePresent = isConnectionClose(headers);//这里即默认使用trunked,但需要有相应的前提//如果客户端显示设置Connetion:close时,即表示客户端只会请求一次,不会使用Keep-Alive,这样的话,不需要使用trunked传输,//因为客户端知道何时数据已经传输完,使用read() == -1即可判断 if (entityBody && http11 && !connectionClosePresent) {//使用ChunkedOutputFilter来对传输的数据二次处理,即分段传输 getOutputBuffer().addActiveFilter (outputFilters[Constants.CHUNKED_FILTER]); contentDelimitation = true; headers.addValue(Constants.TRANSFERENCODING).setString(Constants.CHUNKED); } else {//最后使用原始数据传输方式 getOutputBuffer().addActiveFilter (outputFilters[Constants.IDENTITY_FILTER]); } }此段代码将在应用处理完逻辑或者调用response.outputStream.write时会调用。详细的处理逻辑,可参考上文中的注释。 需要注意的是,由于Http工作在TCP/IP之上,因此数据的完整性保证已经不需要由Http来处理了。所以依靠trunked来保证数据完整性已经没有太大意义。现在trunked的意义在于针对keep alive传输时,trunked可以通过特殊的处理来告诉客户端(通过发送头长度0来标识),该次的数据已经响应完毕。客户端可以处理并再次使用该连接进行下一次处理了。所以在上面的trunked处理中,tomcat如果认为没有使用trunked的必要时,就不会强制使用trunked了(如connection:close这种一次性请求模型) 客户端实现HttpClienthttpclient(版本4.3.3)的主要实现在类EntityDeserializer中,即如何去获取数据并反向解码。实现方法为doDeserialize,主要的实现如下所示: final long len = this.lenStrategy.determineLength(message); if (len == ContentLengthStrategy.CHUNKED) { entity.setChunked(true); entity.setContentLength(-1); entity.setContent(new ChunkedInputStream(inbuffer)); } else if (len == ContentLengthStrategy.IDENTITY) { entity.setChunked(false); entity.setContentLength(-1); entity.setContent(new IdentityInputStream(inbuffer)); } else { entity.setChunked(false); entity.setContentLength(len); entity.setContent(new ContentLengthInputStream(inbuffer, len)); }即通过判断lengh值来确定是使用不同的数据解析。解析出来的流处理共有3种不同的处理方式,即transfer-encoding中指定的chunked和identity,以及由content-length指定的处理方式。 对length的判断逻辑如下所示: final Header transferEncodingHeader = message.getFirstHeader(HTTP.TRANSFER_ENCODING); // We use Transfer-Encoding if present and ignore Content-Length. // RFC2616, 4.4 item number 3//首先根据RFC26216 4.4中介绍的,首先处理transfer-encoding if (transferEncodingHeader != null) { final HeaderElement[] encodings; encodings = transferEncodingHeader.getElements(); // The chunked encoding must be the last one applied RFC2616, 14.41 final int len = encodings.length;//只判断是否和trunked和identity相等,在都不相等的情况下默认使用identity,以避免解析出错的情况 if (HTTP.IDENTITY_CODING.equalsIgnoreCase(transferEncodingHeader.getValue())) { return IDENTITY; } else if ((len > 0) && (HTTP.CHUNK_CODING.equalsIgnoreCase( encodings[len - 1].getName()))) { return CHUNKED; } else { return IDENTITY; } }//然后再使用content-length,这里同样判断,只有在确定好conten-length的情况下才使用,如果确定不好,仍然使用identity final Header contentLengthHeader = message.getFirstHeader(HTTP.CONTENT_LEN); if (contentLengthHeader != null) { long contentlen = -1; final Header[] headers = message.getHeaders(HTTP.CONTENT_LEN); contentlen = Long.parseLong(header.getValue()); } if (contentlen >= 0) { return contentlen; } else { return IDENTITY; } }在以上的处理当中,我们看到identity处理方式最多的。可以理解为,只要是不能解析的都使用identity,即原始处理方式。 通过以上的实现,可以了解客户端在接收完数据之后的不同响应方式和处理逻辑,这也能解释在项目中的奇怪情况了。 问题出现及解决在我们的项目中,由于上面的错误的filter的问题。我们在之前使用httpclient在接收数据时(使用httpPost),本来想接收一个json数据串,即总是返回类似以下的数据: 20{abxxx.......}0这种情况只在处理我们请求的服务才会出现,请求其它之前的项目服务不会出现。多次发现这个特殊的值,好像表示数据长度。在不知道原因的情况下,我们通过在服务中加入以下代码之后,问题好像就解决了: byte[] bytes = generatedBytes();//生成json bytes数组信息response.setContentLength(bytes.length);//强制性设置contentLength值response.getoutputStream.write(bytes);但又有一个问题发生了,发现响应很慢。每次请求都要花费接近20s的时间,但监控服务代码,响应很快的。而且在服务返回之后,客户端需要继续等待一段时间才返回数据。经debug代码,最终发现httpclient在使用EntityUtils.toString中是这样写的: final Reader reader = new InputStreamReader(instream, charset); final CharArrayBuffer buffer = new CharArrayBuffer(i); final char[] tmp = new char[1024]; int l; while((l = reader.read(tmp)) != -1) { buffer.append(tmp, 0, l); } return buffer.toString();这里的while循环在连接未关闭的情况下会一直等待。结合到keepAlive属性,这里肯定默认会使用keepAlive进行请求,而后服务器也肯定没有关闭连接。因此,我们又在使用httpClient时,强制加入以下头: httpPost.addHeader("Connection","Close"); 这样声明客户端只会请求一次,就断开连接。
2023-08-05 08:36:171

jsp登陆页面的用户名验证的时候怎么区分大小写。

String name = "Fance";String inputName = "fance";boolean isEqual = name.equalsIgnoreCase(inputName );
2023-08-05 08:36:374

JAVA从键盘输入11位手机号码,将第4位-7位替换为“XXXX”并输出替换后的手机号?

import java.util.Scanner;public class test{ public static void main(String[] args) { String phoneNum,str="",begin="",end=""; int count = 0; System.out.print("请输入一个11位手机号:"); phoneNum = new Scanner(System.in).next(); while (phoneNum.length()!=11||(int)(phoneNum.substring(0,1).charAt(0))!=49) { System.out.println("你输入的不是一个11位手机号! "); System.out.print("请输入一个11位手机号:"); phoneNum = new Scanner(System.in).next(); } for (int i = 0; i < phoneNum.length(); i++) { if ((int)(phoneNum.substring(i,i+1).charAt(0))>=48&&(int)(phoneNum.substring(i,i+1).charAt(0))<=57 ) { count++; } } while (count!=phoneNum.length()) { System.out.println("你输入的不是一个11位手机号! "); System.out.print("请输入一个11位手机号:"); phoneNum = new Scanner(System.in).next(); } for (int i = 0; i < 3; i++) { //截取开头三位 str+=phoneNum.substring(i,i+1); begin=str; } for (int i = 3; i <= 6; i++) { //截取并替换4到7位 str+="X"; } for (int i = 7; i < phoneNum.length(); i++) { //截取剩余四位 str+=phoneNum.substring(i,i+1); end+=phoneNum.substring(i,i+1); } System.out.println("你输入的手机号是:"+str); if (begin.equalsIgnoreCase("135")&&end.equalsIgnoreCase("1234")) { System.out.println("恭喜您获得了一等奖!"); }else { System.out.println("很遗憾,你未能中奖!"); } }}
2023-08-05 08:36:441

java 急

日历,直接调用日期函数.几乎什么都不用做.记事本,直接调用打开/保存函数,也几乎什么都不用做.只要写两条代码改改字体改改大小就行了.
2023-08-05 08:36:533

java 获取字符串最后一个字符是不是想要的字符

String str = “asdfgh”int a ;String test = str.subString(5)System.out.put(test);结果为"h"
2023-08-05 08:37:013

Java中判断字符串是否相等不区分大小写的方法?

字符串对象.equalsIgnoreCase(对比的对象)
2023-08-05 08:37:352

jsp中如何计算日期加天数?

转换成秒然后相减得到秒数然后计算秒转换成天
2023-08-05 08:37:422

定义一个长度为10的整型数组,其值为{21,45,38,66,73,14,55,99,85,10},求其最大值

import java.util.Scanner;public class Test {public static void main(String[] args) { int[] array = new int[1000]; for (int i = 0; i < 1000; i++) { array[i] = i; } boolean loopFlag = true; while(loopFlag) { System.out.println("请输入字符:"); Scanner sc = new Scanner(System.in); String result = sc.nextLine(); if ("A".equalsIgnoreCase(result)) { array = sort(array, result); print(array); } else if ("B".equalsIgnoreCase(result)) { array = sort(array, result); print(array); } else if ("C".equalsIgnoreCase(result)) { array = sort(array, result); print(array); } else { System.out.println("你输入的不合法,请重新输入..."); } System.out.println("按Y/y继续,按N/n退出?"); Scanner scanner = new Scanner(System.in); String input = scanner.nextLine(); if ("N".equalsIgnoreCase(input)) { loopFlag = false; System.out.println("退出成功!"); } } } /** * @param a * @param b * @param type 比较类型 * @return 若a>b 返回true */ public static boolean compare(int a, int b, String type) { int hundredsDigitA = a / 100; int tenDigitA = a % 100 / 10; int singleDigitA = a % 100 % 10; int hundredsDigitB = b / 100; int tenDigitB = b % 100 / 10; int singleDigitB = b % 100 % 10; if("B".equalsIgnoreCase(type)) { // 十位>个位>百位 if (tenDigitA > tenDigitB) { return true; } else if(tenDigitA < tenDigitB){ return false; } else { if (singleDigitA > singleDigitB) { return true; } else if(singleDigitA < singleDigitB){ return false; } else { if (hundredsDigitA > hundredsDigitB) { return true; } else if(hundredsDigitA < hundredsDigitB){ return false; } else { // a,b相等,返回true/false都可以,基本上不会走到这一步 return true; } } } } else if ("C".equalsIgnoreCase(type)) { // 个位>百位>十位 if (singleDigitA > singleDigitB) { return true; } else if(singleDigitA < singleDigitB){ return false; } else { if (hundredsDigitA > hundredsDigitB) { return true; } else if(hundredsDigitA < hundredsDigitB){ return false; } else { if (tenDigitA > tenDigitB) { return true; } else if(tenDigitA < tenDigitB){ return false; } else { // 相等,返回true/false都可以,基本上不会走到这一步 return true; } } } } else { // 百位>十位>个位 if (hundredsDigitA > hundredsDigitB) { return true; } else if(hundredsDigitA < hundredsDigitB){ return false; } else { if (tenDigitA > tenDigitB) { return true; } else if(tenDigitA < tenDigitB){ return false; } else { if (singleDigitA > singleDigitB) { return true; } else if(singleDigitA < singleDigitB){ return false; } else { // 相等,返回true/false都可以,基本上不会走到这一步 return true; } } } } } /** * * @param array 排序数组 * @param type 排序类型,传入字符串"A"、"B"、"C" * @return */ public static int[] sort(int[] array, String type) { int length = array.length; for (int i = 0; i < length; i++) { for (int j = 0; j < length - 1; j++) { if (!compare(array[j], array[j+1], type)) { // 如果前面的数小于后面的数,就换位 int temp; temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; } } } return array; } public static void print(int[] array) { for (int number : array) { System.out.print(number + ">"); } System.out.println(); }}种,厚度~ cm,其作用是杀灭病菌增强抗性加速萌
2023-08-05 08:37:491

jsp获取客户端局域网的ip

String ip = request.getHeader("x-forwarded-for"); if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); }这样获取的ip就是内网的IP了 请记住我们的团队...
2023-08-05 08:37:591