Scanner类、String类和StringBuffer类的相关使用

 一、Scanner: 主要用于键盘录入的
    构造方法:
        Scanner(InputStream source) 构造一个新的 Scanner ,产生从指定输入流扫描的值。

 1、next()和nextLine()区别:
 String line = sc.next(); // 不会接收特殊字符,比如空格回车这样的符号
 String line = sc.nextLine(); // 能够接收特殊字符,比如空格回车这样的符号
 int number = sc.nextInt(); // 要保证输入的内容能够转成对应的类型,否则报错       InputMismatchException

        2、hasNextXxx()的使用,避免报错
  // hasNextXxx() 判断下一次输入的内容是否符合对应类型

参考使用如下:

 if(sc.hasNextInt()){int num = sc.nextInt();System.out.println("输入的数字为:" + num);}else {System.out.println("您输入的内容无法转成int类型");}

 二、 String: 字符串
    解释:
        白话文描述:使用一个串将一个一个字符串起来的串儿叫字符串。
        专业术语:使用双引号将若干个字符括起来的字符序列
 String: 字符串
    官网概述:
        String类代表字符串。
        Java程序中的所有字符串文字(例如"abc" )都被实现为此类的对象。
        字符串不变; 它们的值在创建后不能被更改。
        字符串缓冲区支持可变字符串。
        因为String对象是不可变的,它们可以被共享。

    概述:
        1、字符串可以看成是字符数组
        2、字符串是由多个字符组成的一串数据(字符序列)
        3、字符串一旦被创建,就不能被改变: 指字符串一旦被创建就不能被修改了,指的是常量池中的字符串值本身不能被修改。参考示例如下:
 

      String s = "abc";System.out.println(s);s = "qwer";System.out.println(s);

结果是qwer  
原因是创建的s对象中的abc值并不会改变,后面重新给s赋值,也并没有覆盖原来的abc,而是不再用它了,但它依然存在方法区中的常量池。

更清楚的解释可参考以下图片:

   2.1 String构造方法:
        public String()                                                    创建一个没有字符的字符串
        public String(byte[] bytes)                                  将一个字节数组转成一个字符串
        public String(byte[] bytes,int offset,int length)    将字节数组的一部分转成字符串
        public String(char[] value)                                  将一个字符数组转成一个字符串
        public String(char[] value,int offset,int count)     将字符数组的一部分转成字符串
        public String(String original)                               将字符串转字符串

具体使用代码如下:

 */
public class StringDemo1 {public static void main(String[] args) {
//        String s = "abc";
//        System.out.println(s);
//        s = "qwer";
//        System.out.println(s);//  public String()String s1 = new String(); // 创建一个没有字符的字符串System.out.println("s1: " + s1); // String类中重写的toString()方法// public String(byte[] bytes) 将一个字节数组转成一个字符串byte[] bytes = {97, 98, 99, 100, 101};将对应数值的ASCII码转换成字符,超出字节数范围127就报错,在这之内如果没有定义的相关字符,就给字符默认值String s2 = new String(bytes);System.out.println("s2: " + s2);// public String(byte[] bytes, int index, int length) 将字节数组的一部分转成字符串String s3 = new String(bytes, 1, 3);System.out.println("s3: " + s3);// public String(char[] value) 将一个字符数组转成一个字符串char[] chars = {'我', '爱', '中', '国'};String s4 = new String(chars);System.out.println("s4: " + s4);// public String(char[] value,int offset,int count) 将字符数组的一部分转成字符串String s5 = new String(chars, 2, 2); // 长度不能超System.out.println("s5: " + s5);// public String(String original) 将字符串转字符串String s6 = new String("hello");System.out.println("s6: " + s6);String s7 = "hello";}
}

2.2 String类中的判断功能:                                                                                                                        首先注意:String类中的equals是重写父类Object中的equals方法,
        boolean equals(Object obj)                     比较的是内容
        boolean equalsIgnoreCase(String str)    忽略大小写比较字符串内容
        boolean contains(String str)                    判断大字符串中是否有小字符串
        boolean startsWith(String str)                 判断字符串是否以指定字符串开头
        boolean endsWith(String str)                  判断字符串是否以指定字符串结尾
        boolean isEmpty()                                   判断字符串是否为空字符串 

具体使用代码如下:

public class StringDemo4 {public static void main(String[] args) {String s1 = "hello";String s2 = "HelLO";//boolean equals(Object obj)boolean b1 = s1.equals(s2); // String类中的equals是重写父类Object中的equals方法,比较的是内容System.out.println(b1);//boolean equalsIgnoreCase(String str)boolean b2 = s1.equalsIgnoreCase(s2); // 忽略大小写比较字符串内容System.out.println(b2);//boolean contains(String str) // 判断大字符串中是否有小字符串String s3 = "wohaoshuai帅";String s4 = "wohao";boolean b3 = s3.contains(s4);System.out.println(b3);//boolean startsWith(String str) // 判断字符串是否以指定字符串开头boolean b4 = s3.startsWith("wo");System.out.println(b4);//boolean endsWith(String str) // 判断字符串是否以指定字符串结尾boolean b5 = s3.endsWith("帅");System.out.println(b5);// boolean isEmpty() 判断字符串是否为空字符串boolean b6 = s3.isEmpty();System.out.println(b6);s3 = "";System.out.println(s3.isEmpty());
//        s3 = null;
//        System.out.println(s3.isEmpty()); // NullPointerException,表明空不等于null}
}

  2.3String类的获取功能
       int length()                                     获取字符串中的字符个数
       char charAt(int index)                     根据索引获取对应的字符
       int indexOf(int ch) 传入字符对应的ascii码值,返回字符从左向右第一次找到的对应的位置索引
       int indexOf(String str)  传入小字符串,在大字符串中找这个小字符串,若找到,返回小字符串中第一个字符所在的索引位置
       int indexOf(int ch,int fromIndex)    从fromIndex索引开始找该字符,若找到了该字符,返回该字符在整个字符串中的位置索引
      int indexOf(String str,int fromIndex)  从fromIndex索引开始找该字符串,若找到了该字符串,返回该字符串的第一个字符在整个大字符串中的位置索引
     String substring(int start)                 从指定索引位置开始截取字符串,返回截取后的字符串
     String substring(int start,int end)     截取从start开始到end结束之间的字符串,返回截取后的字符串,范围是 [start, end)

参考使用如下:

public class StringDemo5 {public static void main(String[] args) {String s1 = "hello world!";//int length() 获取字符串中的字符个数int length = s1.length();//定义一个int类型的length变量接收System.out.println(length);//一个字符串可以被看成一个字符数组,索引是从0开始的//char charAt(int index) 根据索引获取对应的字符System.out.println(s1.charAt(6));//一般情况下,在java中和索引有关的操作,若提供不存在的索引,一般都会直接报错
//        System.out.println(s1.charAt(20)); // StringIndexOutOfBoundsException//int indexOf(int ch) 传入字符对应的ascii码值,返回字符从左向右第一次找到的对应的位置索引System.out.println(s1.indexOf(119));
//        System.out.println(s1.indexOf(126)); // -1  若找不到就返回-1//int indexOf(String str) 传入小字符串,在大字符串中找这个小字符串,若找到,返回小字符串中第一个字符所在的索引位置System.out.println(s1.indexOf("o wo"));System.out.println(s1.indexOf("shu")); // -1//int indexOf(int ch, int fromIndex) 从fromIndex索引开始找该字符,若找到了该字符,返回该字符在整个字符串中的位置索引String s2 = "hello wojavarld nijavahao java";System.out.println(s2.indexOf(111, 12));//int indexOf(String str,int fromIndex) 从fromIndex索引开始找该字符串,若找到了该字符串,返回该字符串的第一个字符在整个大字符串中的位置索引System.out.println(s2.indexOf("java",22)); // 26//String substring(int start) 从指定索引位置开始截取字符串,返回截取后的字符串String s3 = "今天是疯狂星期四,v我50可好?";String s4 = s3.substring(9);System.out.println(s4);//String substring(int start,int end) 截取从start开始到end结束之间的字符串,返回截取后的字符串 [start, end)String s5 = s3.substring(5, 8);System.out.println(s5);}
}

 2.4 String类的转换功能:
        byte[] getBytes()                        将字符串转成一个字节数组
        char[] toCharArray()                   将字符串转成一个字符数组
        static String valueOf(char[] chs) 直接使用String类名的方式进行调用,将字符数组转成字符串
        static String valueOf(int i)          将整数转成字符串
        String toLowerCase()                 将字符串中的字母全部转小写
        String toUpperCase()                 将字符串中的字母全部转大写
        String concat(String str)             字符串的拼接

参考使用如下:

public class StringDemo6 {public static void main(String[] args) {String s1 = "hello WoRlD";//byte[] getBytes() 将字符串转成一个字节数组
//        byte[] bytes = s1.getBytes();
//        for(int i=0;i<bytes.length;i++){
//            System.out.println(bytes[i]);
//        }//char[] toCharArray() 将字符串转成一个字符数组
//        char[] chars = s1.toCharArray();
//        for (int i = 0; i < chars.length; i++) {
//            System.out.println(chars[i]);
//        }//static String valueOf(char[] chs) 直接使用String类名的方式进行调用,将字符数组转成字符串char[] chars = {'我', '爱', '美', '丽', '的', '中', '国'};String s2 = String.valueOf(chars);System.out.println(s2);//static String valueOf(int i)String s3 = String.valueOf(100); //将整数100转成字符串100System.out.println(s3); // 100 --> "100"//String toLowerCase() 将字符串中的字母全部转小写String s4 = s1.toLowerCase();System.out.println(s4);//String toUpperCase() 将字符串中的字母全部转大写String s5 = s1.toUpperCase();System.out.println(s5);//String concat(String str) 字符串的拼接String s6 = "hello";String s7 = "world";String s8 = s6.concat(s7);System.out.println(s8);}
}

 2.5 String类的其他功能:
        替换功能
            String replace(char old,char new)     将字符串中所有的旧字符使用新字符进行替换,返回新的字符串
            String replace(String old,String new) 将字符串中所有的旧字符串使用新字符串进行替换,返回新的字符串
        去除字符串两空格
            String trim()          去除字符串两边的空白字符
        按字典顺序比较两个字符串
            int compareTo(String str)
            int compareToIgnoreCase(String str) 忽略大小写,比较两个字符串

小注意:使用   int compareTo(String str)比较,如果两个字符串完全相同,返回值为0,如果两个字符串存在包含关系,但是第一个字符要相同,比如s1=Javahaha,s2=Jav,返回值为s1的长度减s2的长度,返回值为5,如果两个字符串从第一个字母就不同,则用返回值为两个字符的ASCII码之差。    这和String类中compareTo方法的源码算法有关!

参考使用如下:  

public class StringDemo7 {public static void main(String[] args) {String s1 = "今天ajava的天气是java非炎热,每走一java步都出java汗!";//String replace(char old,char new) 将字符串中所有的旧字符使用新字符进行替换,返回新的字符串String res1 = s1.replace('a', '_');System.out.println("s1: "+s1);System.out.println("res1: "+res1);System.out.println("----------------------------------------------");//String replace(String old,String new) 将字符串中所有的旧字符串使用新字符串进行替换,返回新的字符串String res2 = s1.replace("java", "hadoop");System.out.println("s1: "+s1);System.out.println("res2: "+res2);System.out.println("----------------------------------------------");//String trim() 去除字符串两边的空白字符String s2 = "    hello   world         ";String res3 = s2.trim();System.out.println("s2: "+s2);System.out.println("res3: "+res3);
//        String res4 = s2.replace(" ", "");
//        System.out.println("res4: "+res4);System.out.println("----------------------------------------------");//int compareTo(String str) 比较两个字符串中的内容是否相同,当结果是0的时候,说明比较的两个内容相同String s3 = "hello";String s4 = "world";System.out.println(s3.compareTo(s4)); // -15String s5 = "hel";System.out.println(s3.compareTo(s5)); // 2String s6 = "hello";System.out.println(s3.compareTo(s6)); // 0}
}

小练习:只用String如何将字符串abc反转为cba.

分析;分析:
        1、String没有直接的反转功能,所以先将字符串转字符数组
        2、然后将数组逆序,得到逆序后的字符数组
        3、再将逆序后的字符数组转字符串

代码如下:

public class StringTest2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个要反转的字符串: ");String info = sc.next();System.out.println("反转前:" + info);char[] chars = info.toCharArray();for (int front = 0, end = chars.length - 1; front < end; front++, end--) {char tmp = chars[front];chars[front] = chars[end];chars[end] = tmp;}String res = String.valueOf(chars);System.out.println("反转后:" + res);}
}

三、StringBuffer: 可变字符串,这个容器中只能存放字符
    概述:
        线程安全,可变的字符序列。
        字符串缓冲区就像一个String ,但可以修改。
        在任何时间点,它包含一些特定的字符序列,但可以通过某些方法调用来更改序列的长度和内容。

构造方法:
        public StringBuffer()
        public StringBuffer(int capacity)  自定义初始容量,类似于动态初始化数组时给定的长度
        public StringBuffer(String str)  创建一个StringBuffer,放入一个初始字符串

3.1  StringBuffer的功能:
        添加功能
            public StringBuffer append(String str)
            public StringBuffer insert(int offset,String str)
        删除功能
            public StringBuffer deleteCharAt(int index)
            public StringBuffer delete(int start,int end)
        替换功能
            public StringBuffer replace(int start,int end,String str)
        反转功能
            public StringBuffer reverse()

       截取功能
        public String substring(int start)
        public String substring(int start,int end)

参考代码如下:

public class StringBufferDemo2 {public static void main(String[] args) {StringBuffer sb = new StringBuffer();System.out.println("sb: " + sb);System.out.println("-------------------------------------");// public StringBuffer append(String str) 在末尾处添加字符,返回自身// 任何数据类型值一旦进入到StringBuffer中就是一个一个的普通字符sb.append(100);sb.append(12.345);sb.append(true);sb.append(1000L);sb.append("hello");System.out.println("sb: " + sb);System.out.println("-------------------------------------");//public StringBuffer insert(int offset,String str) 指定位置添加字符串,返回自身sb.insert(9, "_____");System.out.println("sb: " + sb);System.out.println("-------------------------------------");//10012.345_____true1000hello//public StringBuffer deleteCharAt(int index) 根据索引删除某一个字符
//        sb.deleteCharAt(14);
//        System.out.println("sb: " + sb);System.out.println("-------------------------------------");//public StringBuffer delete(int start,int end) [start, end)
//        sb.delete(9,14);
//        System.out.println("sb: " + sb);System.out.println("-------------------------------------");//public StringBuffer replace(int start,int end,String str) 使用一个新的字符串将一段字符串进行替换 [start, end)sb.replace(9, 14, "aaaaaa");System.out.println("sb: " + sb);System.out.println("-------------------------------------");//public StringBuffer reverse()StringBuffer sb2 = new StringBuffer("hello");sb2.reverse();System.out.println("sb2: " + sb2);}
}

四、  String和StringBuffer的相互转换
    A -> B
    B -> A

参考代码如下:

public class StringBufferDemo4 {public static void main(String[] args) {// String -> StringBuffer//可以通过构造方法来转换,将String作为参数传递String s1 = "hello";StringBuffer sb1 = new StringBuffer(s1);//StringBuffer -> String//1、可以使用String类中的构造方法//public String(StringBuffer buffer)StringBuffer sb2 = new StringBuffer("world");String s2 = new String(sb2);//2、调用StringBuffer中toString()方法String s3 = sb2.toString();//3、使用截取的方式将字符串取出来String s4 = sb2.substring(0);}
}

☆☆String和StringBuffer作为参数传递☆☆

String和StringBuffer作为参数传递,相同的是都重写了父类Object的toString方法,所以展示出来的不是地址值,而是对象内容

以下是两者的不同:
一、String作为参数传递:因为没有new,所以内容只在方法区,有相同的字符就会指向常量池中同一个地址值,没有就会创建一个新的,
但是方法调用的时候,只在方法里发生变化,因为方法是在栈里面运行的,所以方法结束,就自动消失,不会对原来的内容发生永久改变,
sb1不变,sb2也不变!,所以外面的System.out.pringtln(),不会受到调用方法的影响

二、StringBuffer当作参数:因为new,在堆里面开辟一块内存空间,当调用方法时,sb2.append(sb1)改变的内容会被保留下来,
而sb1=sb2,这个赋值方法只是运行在栈里面,将sb2的地址值赋值给sb1,并没有直接改变了sb1所指的地址值内容,所以只有sb2在堆里面的内容发生了永久改变,
(总结:谁调用方法谁改变),所以在该方法fun1()后面的System.out.pringtln(sb1,sb2)中,sb1不变,只有sb2发生改变!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/395291.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的 `continue` 语句:掌握循环控制的艺术

Python中的 continue 语句&#xff1a;掌握循环控制的艺术 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通…

服务器数据恢复—Raid故障导致存储中数据库数据丢失的数据恢复案例

服务器存储数据恢复环境&故障情况&#xff1a; 一台光纤存储中有一组由16块硬盘组成的raid。 该存储出现故障导致数据丢失。RAID中2块盘掉线&#xff0c;还有1块盘smart状态为“警告”。 服务器存储数据恢复过程&#xff1a; 1、通过该存储自带的存储管理软件将当前存储的完…

企业常用的文件加密软件排行榜,10款顶级文件加密软件推荐

在数字化时代&#xff0c;企业数据的安全性和保密性显得尤为重要。为了确保敏感文件不被未授权访问或泄露&#xff0c;企业纷纷采用文件加密软件来加强数据保护。以下是2024年企业常用的10款顶级文件加密软件推荐&#xff0c;它们各具特色&#xff0c;能够满足不同企业的需求。…

【第十届泰迪杯数据挖掘挑战赛A题害虫识别】-农田害虫检测识别-高精度完整更新

农田害虫检测识别项目-高精度完整版 一、说明&#xff1a; 该版本为基于泰迪杯完整害虫数据重新制作数据集、优化增强数据集、重新进行模型训练&#xff0c;达到高精度、高召回率的最优模型代码。包含论文、最优模型文件以及相关文件、原始数据集、训练数据集XML版、增强扩充…

【数据结构】哈希应用-海量数据处理

目录 1、10亿个整数里面求最大的100个 2、求大文件交集 3、查找出现次数前210的ip地址 1、10亿个整数里面求最大的100个 经典的tok问题&#xff0c;可以使用堆来解决 2、求大文件交集 给两个文件&#xff0c;分别有100亿个query&#xff0c;我们只有1G内存&#xff0c;如…

如何用 CocosCreator 对接抖音小游戏的侧边栏复访

前言 最近小游戏的软著下来了&#xff0c;用 CocosCreator 做的游戏也完成了 1.0 版本。而当我打包成抖音小游戏进行提交时&#xff0c;还没到初审就给拒了&#xff0c;因为还有一个机审&#xff0c;机器检测到代码中没有接入 “侧边栏复访功能”。这个我还真不知道&#xff0…

不要问人工智能能为你做什么,而要问你能用人工智能实现什么?

​新前沿 欢迎来到雲闪世界。在过去的一年半里&#xff0c;我一直在向我认识的每个人讲述人工智能的潜力&#xff0c;尤其是大型语言模型 (LLM)。无论技术背景如何&#xff0c;现在是时候让每个人学习 LLM 的基础知识以及如何有效地使用它们了。 20 世纪 60 年代&#xff0c;我…

美国服务器稳定么?影响服务器稳定性的6个因素

美国服务器稳定么&#xff1f;美国服务器的稳定性是相当不错的&#xff0c;这主要得益于其先进的技术、成熟的基础设施以及严格的管理措施。美国拥有众多知名的服务器提供商&#xff0c;这些提供商通常会采用顶级的硬件设施&#xff0c;如英特尔、AMD等知名品牌的处理器&#x…

以树莓集团的视角:探索AI技术如何重塑数字媒体产业发展

在科技日新月异的今天&#xff0c;AI技术如同一股不可阻挡的潮流&#xff0c;正深刻改变着我们的世界&#xff0c;尤其是数字媒体产业发展。作为数字产业生态链的杰出建设者&#xff0c;树莓集团始终站在时代前沿&#xff0c;积极探索AI技术如何为数字媒体产业注入新活力。 在树…

NFTScan 正式上线 Gravity NFTScan 浏览器和 NFT API 数据服务

2024 年 8 月 9 号&#xff0c;NFTScan 团队正式对外发布了 Gravity NFTScan 浏览器&#xff0c;将为 Gravity 生态的 NFT 开发者和用户提供简洁高效的 NFT 数据搜索查询服务。NFTScan 作为全球领先的 NFT 数据基础设施服务商&#xff0c;Gravity 是继 Bitcoin、Ethereum、BNBC…

修改nacos实力权重或者对某实例下线报错

在Nacos控制台进行上述操作&#xff0c;错误信息 caused: errCode: 500, errMsg: do metadata operation failed ;caused: com.alibaba.nacos.consistency.exception.ConsistencyException: The Raft Group [naming_instance_metadata] did not find the Leader node;caused:…

IIS部署Linux环境下的cer证书步骤

1. 获取Linux环境的cer证书 Linux环境下的cer证书位于&#xff1a;root/.acme.sh 下&#xff0c;下载到Windows服务器。 2. 将cer证书转为pfx证书 IIS导入证书的时候只支持pfx格式证书&#xff0c;所以需要转换一下&#xff0c;确保Windows服务器上已安装openssl工具&#x…

GD 32 IIC通信协议

前言&#xff1a; ... 通信方式 通信方式分为串行通信和并行通信。常见的串口就是串行通信的方式 常用的串行通信接口 常用的串行通信方式有USART,IIC,USB,CAN总线 同步与异步 同步通信&#xff1a;IIC是同步通信&#xff0c;有两个线一个是时钟信号线&#xff0c;一个数数据…

【工具类】JAVA (Android Studio )+ JS 加密解密 AES + Base 64

JAVA &#xff08;Android Studio &#xff09; JS 加密解密 AES Base 64 前言JAVA 代码&#xff08;解密&#xff09;JS代码&#xff08;加密&#xff09; 前言 整个过程&#xff1a; JS 接口先用AES加密&#xff0c;然后加密内容转Base64 编码&#xff1b;JAVA进行Base64解…

三十二、【人工智能】【机器学习】【监督学习】- XGBoost算法模型

系列文章目录 第一章 【机器学习】初识机器学习 第二章 【机器学习】【监督学习】- 逻辑回归算法 (Logistic Regression) 第三章 【机器学习】【监督学习】- 支持向量机 (SVM) 第四章【机器学习】【监督学习】- K-近邻算法 (K-NN) 第五章【机器学习】【监督学习】- 决策树…

将PPT中的元素保存为高清图片

PPT制作流程图&#xff0c;思维导图或者演示图片非常方便&#xff0c;本文主要记录如何将一个在PPT中画好的图片导出为高清图片。 1.在ppt中设计图片 以我在PPT中画的图片为例&#xff0c;将所有元素选中&#xff0c;右键组合&#xff0c;成为一个整体 2.另存为增强型元文件 …

vscode 快速生成vue 格式

1.用快捷Ctrl Shift P唤出控制台 输入“Snippets”并选择 Snippets: Configure User Snippets 2.输入vue&#xff0c;选中vue.json vs code自动生成vue.json文件 3.在 vue.json 中添加模板 {"Print to console": {"prefix": "vue2","b…

AI大语言模型对消防工程知多少?

在过去2年的时间里&#xff0c;大语言模型受到前所未有的关注。ChatGPT的出现更是让人工智能对话风靡一时。我们不再把搜索引擎当作求解问题的唯一途径&#xff0c;AI聊天成为了当前最受欢迎的问题求助工具。 让ChatGPT用通俗的语言解释什么是ChatGPT 什么是大语言模型&#x…

如何看待“低代码”开发平台的兴起

目录 1.概述 1.1.机遇 1.2.挑战 1.3.对开发者工作方式的影响 2.技术概览 2.1.主要特点 2.2.市场现状 2.3.主流低代码平台 2.4.分析 3.效率与质量的权衡 3.1.提高开发效率 3.2.质量与安全隐患 3.3.企业应用开发的利弊分析 4.挑战与机遇 4.1.机遇 4.2.挑战 4.3.…

PHP相关漏洞

一、PHP漏洞原理 1.PHP命令执行漏洞 PHP应用程序有时需要调用一些执行系统命令的函数&#xff0c;如php中的system&#xff0c;exec&#xff0c;shell exec&#xff0c;passthru&#xff0c;popen等&#xff0c;当用户可以控制这些函数的参数时&#xff0c;就可以将恶意系统命…