cef网站模板源码分享?ctf网站源码

大家好,关于cef网站模板源码分享很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于ctf网站源码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

目录

2.1、==比较是否变量中的值

2.2、booleanequal(ObjectanObject)方法,按照字典序(字符大小顺序)比较

2.4、compareToIgnoreCase方法:忽略大小写比较

4.1、数值和字符串转化

5.5、contains是否包含某内容

8、StringBuilder和StringBuffffer

总结StringBuilder与String类的区别

题目一:字符串中的第一个唯一字符

题目二:字符串最后一个单词的长度

题目三:检测字符串是否为回文

String类,在Java中属于字符串类型。

1、字符串构造

常用的三种构造字符串的方式:

代码:

publicclassTest{\npublicstaticvoidmain(String[]args){\n//方法一:\nStringstr1=&34;;//str是一个引用变量,happy属于字符串常量\nSystem.out.println(str1);\n\n//方法二:\nStringstr2=newString(&34;);\nSystem.out.println(str2);\n\n//方法三\nchar[]ch={&39;,&39;,&39;,&39;};//字符数组\nStringstr3=newString(ch);\nSystem.out.println(str3);\n}\n}

运行结果:

补充:

String是引用类型,内部并不存储字符串本身

查看String类,会看到他有两个属性

比如我们看例中的happy的内存分布:

2、String对象的比较

2.1、==比较是否变量中的值

例:

publicclassTest{\npublicstaticvoidmain(String[]args){\ninta=10;\nintb=30;\nintc=10;\nSystem.out.println(a==b);\nSystem.out.println(a==c);\n}\n}

运行结果如下:

但是这个比较只针对内置类型,对于引用类型,这么比较就是错误的,因为他比较的是值,也就是比较的是引用中的地址,并没有比较其指向的内容

2.2、booleanequal(ObjectanObject)方法,按照字典序(字符大小顺序)比较

String类重写了父类Object中的Equals方法,Object中equals默认是==比较,源码:

而String重写,源码:

按照以下规则比较:

例:

publicclassTest{\n\npublicstaticvoidmain(String[]args){\nStringstr1=&34;;\nStringstr2=&34;;\nStringstr3=&34;;\nSystem.out.println(str1.equals(str2));\nSystem.out.println(str1.equals(str3));\n}\n}

运行:

2.3、compareTo方法:

查看String中compareTo方法源码:

例:

publicstaticvoidmain(String[]args){\nStringstr1=&34;;\nStringstr2=&34;;\nStringstr3=&34;;\nintret1=str1.compareTo(str2);\nif(ret1>0){\nSystem.out.println(&34;);\n}elseif(ret1==0){\nSystem.out.println(&34;);\n}else{\nSystem.out.println(&34;);\n}\nintret2=str1.compareTo(str3);\nif(ret2>0){\nSystem.out.println(&34;);\n}elseif(ret2==0){\nSystem.out.println(&34;);\n}else{\nSystem.out.println(&34;);\n}\n}

运行结果:

2.4、compareToIgnoreCase方法:忽略大小写比较

例:

publicstaticvoidmain(String[]args){\nStringstr1=&34;;\n\nStringstr2=&34;;\nSystem.out.println(str1.equalsIgnoreCase(str2));\n\n}

运行结果:

3、字符串查找

常用的方法总结:

方法

功能

charcharAt(intindex)

放回index位置上字符,如果index为负数或者越界,抛出indexOutOfBoundsException异常

intindexOf(intch)

返回ch第一次出现的位置,没有返回-1

intintdexOf(intch,intfromIndex)

从fromIndex位置开始找ch第一次出现的位置,没有返回-1

intindexOf(Stringstr)

返回dtr第一次出现的位置,没有返回-1

intindexOf(Stringstr,intfromIndex)

从fromIndex位置开始找str第一次出现的位置,没有返回-1

intlastIndexOf(intch)

从后往前找,返回ch第一次出现的位置,没有返回-1

intlastIndexOf(intch,int

从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1

intlastIndexOf(Stringstr)

从后往前找,返回str第一次出现的位置,没有返回-1

intlastIndexOf(Stringstr,int

fromIndex)

从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返

回-1

范例:

publicstaticvoidmain(String[]args){\n\nStringstr=&34;;\nfor(inti=0;i<str.length();i++){\ncharch=str.charAt(i);\nSystem.out.print(ch+&34;);//abcdef\n}\nSystem.out.println();\nSystem.out.println(str.indexOf(&39;));//3\nSystem.out.println(str.indexOf(&39;,3));//4\n\nStringstr1=&34;;\nSystem.out.println(str1.indexOf(&34;));//3\nSystem.out.println(str1.indexOf(&34;,4));//-1\n\nSystem.out.println(str1.lastIndexOf(&39;));//7\nSystem.out.println(str1.lastIndexOf(&39;,4));//2\nSystem.out.println(str1.lastIndexOf(&34;));//3\nSystem.out.println(str1.lastIndexOf(&34;,6));//3\n\n}

4、转化

4.1、数值和字符串转化

publicstaticvoidmain(String[]args){\n\n//其他类型转换为字符串\nStringstr1=String.valueOf(410);\nStringstr2=String.valueOf(&39;);\nStringstr3=String.valueOf(3.14);\nStringstr4=String.valueOf(3.5f);\nStringstr5=String.valueOf(false);\nStringstr6=String.valueOf(newPerson(&34;,18));\nSystem.out.println(str1+&34;+str2+&34;+str3+&34;+str4+&34;+str5+&34;+str6);//410l3.143.5falsePerson{name=&39;,age=18}\n\n//字符串转换为其他类型\nintval=Integer.valueOf(&34;);\nintval1=Integer.parseInt(&34;);\ndoubleval2=Double.parseDouble(&34;);\nfloatval3=Float.parseFloat(&34;);\nSystem.out.println(val+&34;+val1+&34;+val2+&34;+val3);//4103183.143.5\n\n}

4.2、大小写转换

publicstaticvoidmain(String[]args){\nStringstr1=&34;;\nSystem.out.println(str1.toUpperCase());//FAMILY\nStringstr2=&34;;\nSystem.out.println(str2.toLowerCase());//love\n}

4.3、字符串转数组

publicstaticvoidmain(String[]args){\n//字符串转数组\nStringstr1=&34;;\nchar[]chars=str1.toCharArray();\nfor(inti=0;i<str1.length();i++){\nSystem.out.print(chars[i]+&34;);//todayisso…\n}\n\n//数组转字符串\nStringstr2=newString(chars);\nSystem.out.println(str2);//todayisso…\n}

4.4、格式化

publicstaticvoidmain(String[]args){\nStrings=String.format(&34;,2022,8,12);\n//有点类似于printf\nSystem.out.println(s);//2022-8-12\n}

5、常用方法

5.1、字符串替换

方法

功能

Stringreplace(charoldChar,charnewChar)

替换指定字符

Stringreplace(Stringtarget,Stringreplacement)

替换指定内容

StringreplaceAll(Stringregex,Stringreplacement)

替换所有的指定内容

StringreplaceFirst(Stringregex,Stringreplacement)

替换收个内容

范例:

publicstaticvoidmain(String[]args){\nStringstr1=&34;;\nStringret=str1.replace(&39;,&39;);\nSystem.out.println(ret);//abkyjkyjabkyjabcdef\nret=str1.replace(&34;,&34;);\nSystem.out.println(ret);//abcykcykabcykabcdef\nret=ret.replaceFirst(&34;,&34;);\nSystem.out.println(ret);//ablyjcykabcykabcdef\nret=ret.replaceAll(&34;,&34;);\nSystem.out.println(ret);//ablyjlyjablyjabcdef\n}

5.2、字符串拆分

方法

功能

String[]split(Stringregex)

将字符串全部拆分

String[]split(Stringregex,intlimit)

将字符串以指定的格式,拆分为limit组

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nString[]ret=str.split(&34;);\nSystem.out.println(Arrays.toString(ret));//[lyjhhh,ccykee]\nstr=&34;;\nret=str.split(&34;,2);\nSystem.out.println(Arrays.toString(ret));//[lyj,cyk@lyz@lxm]\n}

注:如果一个字符串中有多个分隔符,可以用&34;作为连字符.

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nString[]ret=str.split(&34;);\nSystem.out.println(Arrays.toString(ret));//[lyz,cyk*lyj,lxm]\n\n}

5.3、字符串截取

方法

功能

Stringsubstring(intbeginIndex)

从指定索引截取到结尾

Stringsubstring(intbeginIndex,intendIndex)

截取部分内容

范例:

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nStringret1=str.substring(1);\nSystem.out.println(ret1);//elloworld\nStringret2=str.substring(1,5);//前开后闭\nSystem.out.println(ret2);//ello\n}

5.4、trim空格字符处理

Stringtrim()功能:

去掉字符串中的左右空格,保留中间空格

范例:

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nStringret=str.trim();\nSystem.out.println(ret);//helloworld\n}

5.5、contains是否包含某内容

判断是否包含某字符串

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nSystem.out.println(str.contains(&34;));//true\n}

6、字符串常量池

字符串常量池,其底层是一个StringTable的哈希表

通俗的来说,就是为了使程序运行得更快,更加节省内存,Java就引出了,池的概念,而字符串常量池,就是存放一些我们常用的字符串,其由双引号括起来的,例:

Stringstr=&34;;\n

其内存布局:

注:上述提到过的,String类有两个属性,一个value,一个hash

在字符串常量池中,没有对应的字符串时,将其存入,如果有了,则就会使用那一份现有的数据。

根据上述提示,分析下面的代码运行结果:

publicstaticvoidmain(String[]args){\nStringstr1=&34;;\nStringstr2=&34;;\nStringstr3=newString(&34;);\nStringstr4=newString(&34;);\n\nSystem.out.println(str1==str2);//true\nSystem.out.println(str3==str4);//false\nSystem.out.println(str1==str3);//false\n}

内存布局分析:

补充:intern方法

该方法的作用是手动将创建的String对象添加到常量池中

publicstaticvoidmain(String[]args){\nchar[]ch=newchar[]{&39;,&39;,&39;};\nStrings1=newString(ch);//没有入池\ns1.intern();//入池\nStrings2=&34;;\nSystem.out.println(s1==s2);//true\n\nchar[]ch1=newchar[]{&39;,&39;,&39;};\nStrings3=newString(ch1);\nStrings4=&34;;\nSystem.out.println(s3==s4);//false\n}

面试题:

请解释String类中两种对象实例化的区别(常量池中都不存在以下字符串)

JDK1.8中

提示:根据上述例中的内存图,可知,每创建一个字符串对象时,有一个value和一个hash,

value又指向对应的字符串,一共两个对象

1.Stringstr=&34;

正解:2

只会开辟一块堆内存空间,保存在字符串常量池中,然后str共享常量池中的String对象

2.Stringstr=newString(&34;)

正解:3

会开辟两块堆内存空间,字符串&34;保存在字符串常量池中,然后用常量池中的String对象

给新开辟的String对象赋值。

3.Stringstr=newString(newchar[]{&39;,&39;,&39;,&39;,&39;})

正解:3

现在堆上创建一个String对象,然后利用copyof将重新开辟数组空间,将参数字符串数组中内

容拷贝到String对象中

7、字符串的不可变性

String类不可变的原因:

1.方便实现字符串对象池.如果String可变,那么对象池就需要考虑写时拷贝的问题了.

2.不可变对象是线程安全的.

3.不可变对象更方便缓存hashcode,作为key时可以更高效的保存到HashMap中.

从哪儿观察到不可变呢?观察其源码:

而我们在上述的方法中,提到的所有关于会改变字符串的方法,他其实都是新创建了一个对象

看以下代码:

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nfor(inti=0;i<20;i++){\nstr+=i;\n}\nSystem.out.println(str);//*012345678910111213141516171819\n}

我们去查看一下他的汇编:

由于效率太低,因此,引入另一种方法:

代码改进:

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nStringBuilderstringBuffer=newStringBuilder();\nstringBuffer.append(str);\nfor(inti=0;i<20;i++){\nstringBuffer.append(i);\n}\nSystem.out.println(stringBuffer);//*012345678910111213141516171819\n}

不太明白吧?继续向下看咯:

8、StringBuilder和StringBuffffer

StringBuilderStringBuffffer也可以表示字符串,但他们不能直接赋值

使用举例:

publicstaticvoidmain(String[]args){\nStringBuilderstringBuilder=newStringBuilder(&34;);\nSystem.out.println(stringBuilder);//love\n\nstringBuilder.reverse();\nSystem.out.println(stringBuilder);//evol\n}

这个字符串逆序,String类是没有这个方法的

从这可以观察到,StringBuilder和StringBuffffer与String类的区别,String对字符串内容变动时,都是需要新创建一个对象,并需要接收这个对象,而StringBuilderStringBuffffer它们是对相应的字符串本身进行修改的,因此不需要接收。

总结StringBuilder与String类的区别

String:1.String创建的对象是不可变的,一旦创建不可改变2.对象值可以改变其实是创建了一个新的对象,然后把新的值保存进去3.String类被final修饰,不可以被继承4.String创建的对象的值存在于常量池,不用的时候不会被销毁5.String运行时间较长6.String适用于比较短而小的字符串

StringBuffer

1.StringBuffer创建的对象是可变的2.它的改变不像String那样重新创建对象,而是通过构造方法3.StringBuffer创建的对象的值存在于栈区,不用的时候会被销毁4.StringBuffer运行时间较短5.StringBuffer适用于比较长的字符串、比较多的字符串

StringBuilder具体其他的方法,可以查看文档:http://StringBuilder在线文档

补充:1、String与StringBuilder相互转换:

publicstaticvoidmain(String[]args){\nStringstr=&34;;\nStringBuilderstringBuilder=newStringBuilder(str);//String变成了StringBuilder\n\nSystem.out.println(stringBuilder);\n}

StringBuilders=newStringBuilder(&34;);\nStrings=s.toString();

面试题:

1.String、StringBuffffer、StringBuilder的区别?

String的内容不可修改,StringBuffffer与StringBuilder的内容可以修改.

StringBuffffer与StringBuilder大部分功能是相似的

StringBuffffer采用同步处理,属于线程安全操作;而StringBuilder未采用同步处理,属于线程

不安全操作

2.以下总共创建了多少个String对象【前提不考虑常量池之前是否存在】

Stringstr=newString(&34;);//会创建2个对象

Stringstr=newString(&34;)+newString(&34;);//会创建6个对象

第二题的不理解看图:

toString转换会new新的对象:

9、OJ题巩固

题目一:字符串中的第一个唯一字符

题目描述:

两次遍历

count为计数数组(利用ASCII码,a对应97),一开始创建的count数组,里面所有值默认为0

第一次遍历,用字符的ASCII码减去&39;,得到的下标就与计数数组对应上了,将其加一

第二次遍历,将第一个为1的返回即可

代码:

classSolution{\npublicintfirstUniqChar(Strings){\nint[]count=newint[26];\n\nfor(inti=0;i<s.length();i++){\ncharch=s.charAt(i);\ncount[ch-&39;]++;\n}\nfor(inti=0;i<s.length();i++){\ncharch=s.charAt(i);\nif(count[ch-&39;]==1){\nreturni;\n}\n}\nreturn-1;\n}\n}

测试通过:

题目二:字符串最后一个单词的长度

解法一:找到最后一个空格的位置,用总长度减去即可

代码:

importjava.io.InputStream;\nimportjava.util.Scanner;\n\npublicclassMain{\npublicstaticvoidmain(String[]args)throwsException{\nScannersc=newScanner(System.in);\nStringstr=sc.nextLine();\nintn=str.lastIndexOf(&39;);\nintx=str.length();\nSystem.out.println(x-n-1);\n}\n}

测试通过:

解法二:用字符串分割方法,输出其数组的最后一个字符串的长度

代码:

importjava.io.InputStream;\nimportjava.util.Scanner;\n\npublicclassMain{\npublicstaticvoidmain(String[]args)throwsException{\nScannersc=newScanner(System.in);\nStringstr=sc.nextLine();\nString[]ret=str.split(&34;);\nSystem.out.println(ret[ret.length-1].length());\n}\n}

测试通过:

题目三:检测字符串是否为回文

题目描述:

思路在代码中有注释:

代码:

classSolution{\n//有效字符判断\npublicbooleanisEffective(charch){\n\nreturnCharacter.isLetterOrDigit(ch);\n}\npublicbooleanisPalindrome(Strings){\n//统一大小写\ns=s.toLowerCase();\n\nintright=s.length()-1;\nintleft=0;\n//回文判断\nwhile(left<right){\nwhile(left<right&&!isEffective(s.charAt(left))){\nleft++;\n}\nwhile(left<right&&!isEffective(s.charAt(right))){\nright–;\n}\nif(s.charAt(left)!=s.charAt(right)){\nreturnfalse;\n}\nleft++;\nright–;\n}\nreturntrue;\n\n}\n}

测试通过:

关于cef网站模板源码分享和ctf网站源码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平