jsp 判断字符串相等

jsp 判断字符串相等,第1张

两个字符串比较大小:

一、可以用compareTo()方法,另外还有compareToIgnoreCase(String)忽略大小写及compareTo(object string)这些方法返回值是int,以compareTo()方法为例:

1如果字符串相等返回值为0,不等返回其他数值。

比较方法是先比较对应字符的大小(Ascall吗顺序),从第一个字母开始比较。

2如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)

(负值前字符串的值小于后字符串,正值前字符串大于后字符串)

3如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,

以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度

例如:

String s1="abc";

String s2="abcd";

String s3="abcdfg";

String s4="1bcdfg";

String s5="cdfg";

Systemoutprintln(s1compareTo(s2));//-1(前面相等,s1长度小1)

Systemoutprintln(s1compareTo(s3));//-3(前面相等,s1长度小3)

Systemoutprintln(s1compareTo(s4));//48("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48)

Systemoutprintln(s1compareTo(s5));//-2("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

二、还可以用“==”和equals()方法判断大小:

1“==”是一个判断相等的运算符,如果两边是基本数据类型,它判断的是值;如果两边是复合型数据类型(类类型),它判断的是地址;地址相同,内容一定相同,地址不同,内容不一定相同。

2equals()方法只能判断复合型数据类型,由于继承Object类,默认判断的是两边在内存的地址,判断结果和“==”一样,但在一些其他的类库中equals()被重写,例如String,Integer,Data等类中有其自身的实现,比较内容就不是地址了。

例如:

String str1=new String("hello");

String str2="hello";

Systemoutprintln("str1==str2:"+(str1==str2));\\false

Systemoutprintln("str1equals(str2):"+str1equals(str2));\\true

当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。

但equals()在String中被重写过了,判断的是内容,不在是内存中的地址,所以是true。

但是String比较特殊,因为我们都知道jvm把内存分为3个区,分别是方法区,堆区和栈区。而在方法区中维护者一个String常量池,池中用来存放运行时产生的各种字符串,并且池中的内容不重复。而一般对象不在这个池中,对象放在堆里。这就需要分析String的创建方式:

1当使用任何方式来创建一个字符串对象str=“X”时,Java运行时(运行中JVM)会拿着这个X在String池中找是否存在内容相同的字符串对象,如果不存在,则在池中创建一个字符串str,否则,不在池中添加。

2Java中,只要使用new关键字来创建对象,则一定会(在堆区或栈区)创建一个新的对象。

3使用直接指定或者使用纯字符串串联来创建String对象,则仅仅会检查维护String池中的字符串,池中没有就在池中创建一个,有则罢了!但绝不会在堆栈区再去创建该String对象。

4使用包含变量的表达式来创建String对象,则不仅会检查维护String池,而且还会在堆栈区创建一个String对象。

例如:

String str2="hello";

String str3="hello";

Systemoutprintln("str3==str2:"+(str3==str2));\\true

Systemoutprintln("str3equals(str2):"+str3equals(str2));\\true

true的原因是hello都是从常量池中取出来的,但你new出来的不管常量池中有没有都会新建一个,地址就不一样了。

扩展资料:

string用法

1string strs

生成空字符串

2string s(str)

生成字符串str的复制品

3string s(str,stridx)

将字符串str中始于stridx的部分作为构造函数的初值

4string(str,strbegin,strlen)

将字符串str中始于strbegin,长度为strlen的部分作为字符串初值

5string s(cstr)

以c_string类型cstr作为字符串s的初值

6string s(cstr,char_len)

以c_string类型cstr的前char_len个字符作为字符串s的初值

7string s(num,c)

生成一个字符串,包含num个c字符

8string s(strs,beg,end)

以区间[beg,end]内的字符作为字符串s的初值

例子

#include<iostream>

#include<string>

using namespace std;

int main()

{

string str("12345678");

char ch[]="abcdefgh";

string a;//定义一个空字符串

string str_1(str);//全部复制

string str_2(str,2,5);//从字符串str的第2个元素开始复制5个元素给str_2

string str_3(ch,5);//将字符串ch的前5个元素赋值给str_3

string str_4(5,'X');//将5个'X'组合赋值给str_4

string str_5(strbegin(),strend());//复制str所有元素给str_5

cout<<str<<endl;

cout<<a<<endl;

cout<<str_1<<endl;

cout<<str_2<<endl;

cout<<str_3<<endl;

cout<<str_4<<endl;

cout<<str_5<<endl;

return 0;

}

E L(Expression Language) 目的:为了使JSP写起来更加简单。
表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言,它提供了在 JSP 中简化表达式的方法。它是一种简单的语言,基于可用的命名空间(PageContext 属性)、嵌套属性和对集合、 *** 作符(算术型、关系型和逻辑型)的访问符、映射到 Java 类中静态方法的可扩展函数以及一组隐式对象。
EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能。脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素。它们通常用于对象 *** 作以及执行那些影响所生成内容的计算。JSP 20 将 EL 表达式添加为一种脚本编制元素。
二、JSP EL简介
1、语法结构
${expression}
2、[ ]与运算符
EL 提供““和“[ ]“两种运算符来存取数据。
当要存取的属性名称中包含一些特殊字符,如或等并非字母或数字的符号,就一定要使用“[ ]“。例如:
${userMy-Name}应当改为${user["My-Name"] }
如果要动态取值时,就可以用“[ ]“来做,而““无法做到动态取值。例如:
${sessionScopeuser[data]}中data 是一个变量
3、变量
EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
二、JSP EL 中的有效表达式
有效表达式可以包含文字、 *** 作符、变量(对象引用)和函数调用。我们将分别了解这些有效表达式中的每一种:
1、文字
JSP 表达式语言定义可在表达式中使用的以下文字:
文字 文字的值
Boolean
true 和 false
Integer
与 Java 类似。可以包含任何正数或负数,例如 24、-45、567
Floating Point
与 Java 类似。可以包含任何正的或负的浮点数,例如 -18E-45、4567
String
任何由单引号或双引号限定的字符串。对于单引号、双引号和反斜杠,使用反斜杠字符作为转义序列。必须注意,如果在字符串两端使用双引号,则单引号不需要转义。
Null null
2、 *** 作符
JSP 表达式语言提供以下 *** 作符,其中大部分是 Java 中常用的 *** 作符:
术语 定义
算术型
+、-(二元)、、/、div、%、mod、-(一元)
逻辑型
and、&&、or、||、!、not
关系型
==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。

空 *** 作符是前缀 *** 作,可用于确定值是否为空。
条件型 A B :C。根据 A 赋值的结果来赋值 B 或 C。
3、隐式对象
JSP 表达式语言定义了一组隐式对象,其中许多对象在 JSP scriplet 和表达式中可用:
pageContext
JSP 页的上下文。它可以用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等。例如,${pageContextresponse} 为页面的响应对象赋值。
此外,还提供几个隐式对象,允许对以下对象进行简易访问:
术语 定义
param
将请求参数名称映射到单个字符串参数值(通过调用 ServletRequestgetParameter (String name) 获得)。getParameter (String) 方法返回带有特定名称的参数。表达式 $(paramname) 相当于 requestgetParameter (name)。
paramValues
将请求参数名称映射到一个数值数组(通过调用 ServletRequestgetParameter (String name) 获得)。它与 param 隐式对象非常类似,但它检索一个字符串数组而不是单个值。表达式 ${paramvaluesname) 相当于 requestgetParamterValues(name)。
header
将请求头名称映射到单个字符串头值(通过调用 ServletRequestgetHeader(String name) 获得)。表达式 ${headername} 相当于 requestgetHeader(name)。
headerValues
将请求头名称映射到一个数值数组(通过调用 ServletRequestgetHeaders(String) 获得)。它与头隐式对象非常类似。表达式 ${headerValuesname} 相当于 requestgetHeaderValues(name)。
cookie 将 cookie 名称映射到单个 cookie 对象。向服务器发出的客户端请求可以获得一个或多个 cookie。表达式 ${cookienamevalue} 返回带有特定名称的第一个 cookie 值。如果请求包含多个同名的 cookie,则应该使用 ${headerValuesname} 表达式。
initParam 将上下文初始化参数名称映射到单个值(通过调用 ServletContextgetInitparameter(String name) 获得)。
除了上述两种类型的隐式对象之外,还有些对象允许访问多种范围的变量,如 Web 上下文、会话、请求、页面:
术语 定义
pageScope
将页面范围的变量名称映射到其值。例如,EL 表达式可以使用 ${pageScopeobjectName} 访问一个 JSP 中页面范围的对象,还可以使用 ${pageScopeobjectNameattributeName} 访问对象的属性。
requestScope
将请求范围的变量名称映射到其值。该对象允许访问请求对象的属性。例如,EL 表达式可以使用 ${requestScopeobjectName} 访问一个 JSP 请求范围的对象,还可以使用 ${requestScopeobjectNameattributeName} 访问对象的属性。
sessionScope
将会话范围的变量名称映射到其值。该对象允许访问会话对象的属性。例如:
$sessionScopename}
applicationScope
将应用程序范围的变量名称映射到其值。该隐式对象允许访问应用程序范围的对象。
三、特别强调:
1、注意当表达式根据名称引用这些对象之一时,返回的是相应的对象而不是相应的属性。例如:即使现有的 pageContext 属性包含某些其他值,${pageContext} 也返回 PageContext 对象。
2、 注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止FALSE表示不禁止JSP20中默认的启用EL语言。
隐含对象数据演示:
EL 表达式定义了11个隐含对象,使用这11个对象可以很方便的读取到session,cookie,>

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13410222.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存