本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
7分33秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 示例 1 : 创建字符串 示例 2 : final 示例 3 : immutable 示例 4 : 字符串格式化 示例 5 : 字符串长度 示例 6 : 练习-随机字符串 示例 7 : 答案-随机字符串 示例 8 : 练习-字符串数组排序 示例 9 : 答案-字符串数组排序 示例 10 : 练习-穷举法破解密码 示例 11 : 答案-穷举法破解密码
字符串即字符的组合,在Java中,字符串是一个类,所以我们见到的字符串都是对象
常见创建字符串手段: 1. 每当有一个字面值出现的时候,虚拟机就会创建一个字符串 2. 调用String的构造方法创建一个字符串对象 3. 通过+加号进行字符串拼接也会创建新的字符串对象 package character;
public class TestString {
public static void main(String[] args) {
String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
String teemo = new String("提莫"); //创建了两个字符串对象
char[] cs = new char[]{'崔','斯','特'};
String hero = new String(cs);// 通过字符数组创建一个字符串对象
String hero3 = garen + teemo;// 通过+加号进行字符串拼接
}
}
package character; public class TestString { public static void main(String[] args) { String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象 String teemo = new String("提莫"); //创建了两个字符串对象 char[] cs = new char[]{'崔','斯','特'}; String hero = new String(cs);// 通过字符数组创建一个字符串对象 String hero3 = garen + teemo;// 通过+加号进行字符串拼接 } }
String 被修饰为final,所以是不能被继承的
package character;
public class TestString {
public static void main(String[] args) {
MyString str = new MyString();
}
/*这里会报错,因为String不能被继承*/
static class MyString extends String{
}
}
package character; public class TestString { public static void main(String[] args) { MyString str = new MyString(); } /*这里会报错,因为String不能被继承*/ static class MyString extends String{ } }
immutable 是指不可改变的
比如创建了一个字符串对象 String garen ="盖伦"; 不可改变的具体含义是指: 不能增加长度 不能减少长度 不能插入字符 不能删除字符 不能修改字符 一旦创建好这个字符串,里面的内容 永远 不能改变 String 的表现就像是一个常量 package character;
public class TestString {
public static void main(String[] args) {
String garen ="盖伦";
}
}
package character; public class TestString { public static void main(String[] args) { String garen ="盖伦"; } } package character;
public class TestString {
public static void main(String[] args) {
String name ="盖伦";
int kill = 8;
String title="超神";
//直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差
String sentence = name+ " 在进行了连续 " + kill + " 次击杀后,获得了 " + title +" 的称号";
System.out.println(sentence);
//格式化字符串
//%s表示字符串,%d表示数字,%n表示换行
String sentenceFormat ="%s 在进行了连续 %d 次击杀后,获得了 %s 的称号%n";
String sentence2 = String.format(sentenceFormat, name,kill,title);
System.out.println(sentence2);
}
}
length方法返回当前字符串的长度
可以有长度为0的字符串,即空字符串 package character;
public class TestString {
public static void main(String[] args) {
String name ="盖伦";
System.out.println(name.length());
String unknowHero = "";
//可以有长度为0的字符串,即空字符串
System.out.println(unknowHero.length());
}
}
package character; public class TestString { public static void main(String[] args) { String name ="盖伦"; System.out.println(name.length()); String unknowHero = ""; //可以有长度为0的字符串,即空字符串 System.out.println(unknowHero.length()); } }
创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母
给点提示: 数字和字符之间可以通过互相转换 char c = 'A'; short s = (short) c; 通过这个手段就能够知道字符 a-z A-Z 0-9 所对应的数字的区间了 需要用到ASCII码对照表
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
13分49秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 package character;
public class TestString {
public static void main(String[] args) {
//方法1
char cs[] = new char[5];
short start = '0';
short end = 'z'+1;
for (int i = 0; i < cs.length; i++) {
while (true) {
char c = (char) ((Math.random() * (end - start)) + start);
if (Character.isLetter(c) || Character.isDigit(c)) {
cs[i] = c;
break;
}
}
}
String result = new String(cs);
System.out.println(result);
//方法2
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool+=(char)i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool+=(char)i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool+=(char)i;
}
char cs2[] = new char[5];
for (int i = 0; i < cs2.length; i++) {
int index = (int) (Math.random()*pool.length());
cs2[i] = pool.charAt( index );
}
String result2 = new String(cs2);
System.out.println(result2);
}
}
创建一个长度是8的字符串数组
使用8个长度是5的随机字符串初始化这个数组 对这个数组进行排序,按照每个字符串的首字母排序(无视大小写) 注1: 不能使用Arrays.sort() 要自己写 注2: 无视大小写,即 Axxxx 和 axxxxx 没有先后顺序
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
5分11秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 package character;
import java.util.Arrays;
public class TestString {
public static void main(String[] args) {
String[] ss = new String[8];
for (int i = 0; i < ss.length; i++) {
String randomString = randomString(5);
ss[i] = randomString;
}
System.out.println("未排序前的字符串数组:");
System.out.println(Arrays.toString(ss));
for (int j = 0; j < ss.length; j++) {
for (int i = 0; i < ss.length - j - 1; i++) {
char firstChar1 = ss[i].charAt(0);
char firstChar2 = ss[i + 1].charAt(0);
firstChar1 = Character.toLowerCase(firstChar1);
firstChar2 = Character.toLowerCase(firstChar2);
if (firstChar1 > firstChar2) {
String temp = ss[i];
ss[i] = ss[i + 1];
ss[i + 1] = temp;
}
}
}
System.out.println("排序后的字符串数组:");
System.out.println(Arrays.toString(ss));
}
private static String randomString(int length) {
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool += (char) i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool += (char) i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool += (char) i;
}
char cs[] = new char[length];
for (int i = 0; i < cs.length; i++) {
int index = (int) (Math.random() * pool.length());
cs[i] = pool.charAt(index);
}
String result = new String(cs);
return result;
}
}
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
9分54秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
package character;
public class TestString {
public static void main(String[] args) {
String password = randomString(3);
System.out.println("密码是:" + password);
char[] guessPassword = new char[3];
outloop:
for (short i = '0'; i <= 'z'; i++) {
for (short j = '0'; j <= 'z'; j++) {
for (short k = '0'; k <= 'z'; k++) {
if (!isLetterOrDigit(i,j,k))
continue;
guessPassword[0] = (char) i;
guessPassword[1] = (char) j;
guessPassword[2] = (char) k;
String guess = new String(guessPassword);
// System.out.println("穷举出来的密码是:" + guess);
if(guess.equals(password)){
System.out.println("找到了,密码是" + guess);
break outloop;
}
}
}
}
}
private static boolean isLetterOrDigit(short i, short j, short k) {
return Character.isLetterOrDigit(i) &&
Character.isLetterOrDigit(j) &&
Character.isLetterOrDigit(k) ;
}
private static String randomString(int length) {
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool += (char) i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool += (char) i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool += (char) i;
}
char cs[] = new char[length];
for (int i = 0; i < cs.length; i++) {
int index = (int) (Math.random() * pool.length());
cs[i] = pool.charAt(index);
}
String result = new String(cs);
return result;
}
}
package character;
public class TestString {
public static boolean found = false;
public static void main(String[] args) {
String password = randomString(3);
System.out.println("密码是:" + password);
char[] guessPassword = new char[password.length()];
generatePassword(guessPassword,password);
}
public static void generatePassword(char[] guessPassword,String password){
generatePassword(guessPassword,0,password);
}
public static void generatePassword(char[] guessPassword,int index,String password){
if(found)
return;
for (short i = '0'; i <= 'z'; i++) {
char c = (char)i;
if(!Character.isLetterOrDigit(c))
continue;
guessPassword[index] = c;
if(index!=guessPassword.length-1){
generatePassword(guessPassword,index+1,password);
}
else{
String guess = new String(guessPassword);
// System.out.println("穷举出来的密码是:" + guess);
if(guess.equals(password)){
System.out.println("找到了,密码是" + guess);
found =true;
return;
}
}
}
}
private static String randomString(int length) {
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool += (char) i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool += (char) i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool += (char) i;
}
char cs[] = new char[length];
for (int i = 0; i < cs.length; i++) {
int index = (int) (Math.random() * pool.length());
cs[i] = pool.charAt(index);
}
String result = new String(cs);
return result;
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-03
抽象为单独的方法,对字符串随机创建数组、排序、打印
4 个答案
Zzz112138 跳转到问题位置 答案时间:2024-08-30 生成的密码是: nS5
(For)找到密码: nS5
(递归)找到密码: nS5
Zzz112138 跳转到问题位置 答案时间:2024-08-30 排序前
01 j112z
02 qezqI
03 49rh7
04 6x2Xf
05 xMy9a
06 0jawX
07 GeKLk
08 KA8FH
排序后
01 0jawX
02 49rh7
03 6x2Xf
04 GeKLk
05 j112z
06 KA8FH
07 qezqI
08 xMy9a
虚心求学 跳转到问题位置 答案时间:2024-07-03 解密程序运行结果:
is decoding 56155
解出的答案为:Unv,原密码为Unv
共进行了56156步
虚心求学 跳转到问题位置 答案时间:2024-07-03 破解密码试题的答案。
以上、以下均为个人理解,恳请各位批评指正。
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2024-06-03
好像感觉就我生成随机字符串最麻烦(笑哭)
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-05-07
三个不同的答案
2023-01-30
为什么把数组换成StringBuilder就找不到了
2022-09-08
字符串排序
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 185 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|