《String类》
目录
一、定义与概述
二、创建字符串对象
2.1 直接赋值
2.2 使用构造函数
三、字符串的不可变性
四、常用方法
4.1 String对象的比较
4.1.1 ==比较是否引用同一个对象
4.1.2 boolean equals(Object anObject)方法:按照字典序比较
4.1.3 int compareTo(String s)方法: 按照字典序进行比较
4.1.4 int compareToIgnoreCase(String str)方法:
4.2 字符串查找
4.2 转化
4.3 字符串替换
4.4 字符串拆分
4.5 字符串截取
4.6 其他操作
五、StringBuilder和StringBuffer
一、定义与概述
在Java中,Sting类是用来表示字符串的。字符串是一个字符序列,例如"Hello, World! "。String类位于 java.lang 包中,这个包是Java语言的核心包之一,不需要显示导入就可以使用。
二、创建字符串对象
2.1 直接赋值
可以通过直接使用双引号来创建String对象,例如:String str = "Hello, World! " 。这种方式创建的字符串,在 Java 的字符串常量池中会检查是否已经存在相同内容的字符串。如果存在,就直接引用该字符串对象;如果不存在,则在常量池中创建一个新的字符串对象。
代码如下:
public class Test1 {public static void main(String[] args) {String str = "Hello, World! ";}
}
2.2 使用构造函数
String():创建一个空字符串对象。例如:String str1 = new String();
String(String original): 使用另一个字符串来创建新的字符串对象。String str2 = new String("Another Java String");
String(char[] value): 通过字符数组来创建字符串,例如:char[] chars = {'h','e','l','l','o'};
String str3 = new String(chars); 这里str3的值就是"hello"。
上述代码:
public class Test1 {public static void main(String[] args) {String str = "Hello, World! ";String str1 = new String();String str2 = new String("Another Java String");char[] chars = {'h','e','l','l','o'};String str3 = new String(chars);System.out.println(str1);System.out.println(str2);System.out.println(str3);}
输出:
三、字符串的不可变性
String类是不可变的(immutable)。这意味着一旦一个String对象被创建,它的值就不能被改变。例如:
String str = "Java";
str = str + " is fun";
在这个例子中,看起来好像是改变了 str 的值,但实际上并不是。当执行 str = str + " is fun"这一行时,会创建一个新的 String 对象,其内容是 "Java is fun",然后 str 变量会指向这个新创建的对象,原来的 "Java" 字符串对象仍然存在于内存中(如果没有其他引用指向它,它会在适当的时候被垃圾回收)。
String类在设计时就是不可改变的,String类实现描述中已经说明了
1. String类被final修饰,表明该类不能被继承
2. value被修饰被final修饰,表明value自身的值不能改变,即不能引用其它字符数组,但是其引用空间中的内容可以修改。
四、常用方法
4.1 String对象的比较
4.1.1 ==比较是否引用同一个对象
注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。
public class Test2 {public static void main(String[] args) {int a=100;int b=200;int c=200;// 对于基本类型变量,==比较两个变量中存储的值是否相同System.out.println(a == b); //falseSystem.out.println(b == c); //trueSystem.out.println("===========");// 对于引用类型变量,==比较两个引用变量引用的是否为同一个对象String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("world");String s4 = s1;System.out.println(s1 == s2); // falseSystem.out.println(s2 == s3); // falseSystem.out.println(s1 == s4); // true}
}
输出:
如果写成下面的形式,会输出true。因为s5 创建后 hello会被放入字符串常量池,就会认为s5 和s6引用的时同一对象。
String s5 = "hello";String s6 = "hello";System.out.println(s5 == s6);
4.1.2 boolean equals(Object anObject)方法:按照字典序比较
String类重写了父类Object中equals方法,Object中equals默认按照==比较,String重写equals方法后。
下面是String类重写equals方法的实现规则
public class Test3 {public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");String s3 = new String("Hello");System.out.println(s1.equals(s2));//trueSystem.out.println(s2.equals(s3));//false}
}
输出截图:
equals比较:String对象中的逐个字符。虽然s1与s2引用的不是同一个对象,但是两个对象中放置的内容相同,因此输出true 。s1与s3引用的不是同一个对象,而且两个对象中内容也不同,因此输出false。
4.1.3 int compareTo(String s)方法: 按照字典序进行比较
与equals不同的是,equals返回的是boolean类型,而compareTo返回的是int类型。具体比较方式:
1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值。
2. 如果前k个字符相等(k为两个字符长度最小值),返回值两个字符串长度差值。
public class Test4 {public static void main(String[] args) {String s1 = new String("abc");String s2 = new String("ac");String s3 = new String("abc");String s4 = new String("abcdef");System.out.println(s1.compareTo(s2)); // 不同输出字符差值-1System.out.println(s1.compareTo(s3)); // 相同输出 0System.out.println(s1.compareTo(s4)); // 前k个字符完全相同,输出长度差值 -3}
}
输出截图:
4.1.4 int compareToIgnoreCase(String str)方法:
与compareTo方式形同,但是忽略大小写。
public class Test5 {public static void main(String[] args) {String s1 = new String("abC");String s2 = new String("Ac");String s3 = new String("Abc");String s4 = new String("ABcdef");System.out.println(s1.compareToIgnoreCase(s2));System.out.println(s1.compareToIgnoreCase(s3));System.out.println(s1.compareToIgnoreCase(s4));}
}
输出截图:
4.2 字符串查找
方法 | 功能 |
char charAt(int index) | 返回index位置上字符,如果index为负数或者越界,抛出 IndexOutOfBoundsException异常。 |
int indexOf(int ch) | 返回ch第一次出现的位置,没有返回-1 |
int indexOf(int ch, int fromIndex) | 从fromIndex位置开始找ch第一次出现的位置,没有返回-1 |
int indexOf(String str) | 返回str第一次出现的位置,没有返回-1 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始找str第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch) | 从后往前找,返回ch第一次出现的位置,没有返回-1 |
int lastIndexOf(int ch, int fromIndex) | 从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返 回-1 |
int lastIndexOf(String str) | 从后往前找,返回str第一次出现的位置,没有返回-1 |
int lastIndexOf(String str, int fromIndex) | 从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返 回-1 |
public class Test6 {public static void main(String[] args) {String s = "abccbaabccba";System.out.println(s.charAt(2)); // 'c'System.out.println(s.indexOf('c'));// 2System.out.println(s.indexOf('a',2));// 5System.out.println(s.indexOf("aa"));// 5System.out.println(s.indexOf("cc",4));//8System.out.println(s.lastIndexOf('c'));//9System.out.println(s.lastIndexOf('b',11));//10System.out.println(s.lastIndexOf("aa"));//5System.out.println(s.lastIndexOf("aa",4));//-1}
}
运行截图:
4.2 转化
1. 数值和字符串转化
class Student{public String name;public int age;public Student(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "name=" + name + ", age=" + age ;}
}
public class Test7 {public static void main(String[] args) {//其它类型转化成字符串String s1 = String.valueOf(1000);String s2 = String.valueOf('a');String s3 = String.valueOf(12.34);String s4 = String.valueOf(new Student("zhangsan",13));System.out.println(s1);System.out.println(s2);System.out.println(s3);System.out.println(s4);//字符串转化数字int data1 = Integer.parseInt("1234");double data2 = Double.parseDouble("12.34");System.out.println(data1);System.out.println(data2);}
}
运行截图:
2. 大小写转换
public class Test8 {public static void main(String[] args) {String s1 = "abc";//小写转换大写System.out.println(s1.toUpperCase());String s2 = "ABC";//大写转换小写System.out.println(s2.toLowerCase());}
}
运行截图:
3. 字符串转数组
public class Test9 {public static void main(String[] args) {String s = "hello";//字符串转化数组char[] chars = s.toCharArray();for (char ch : chars) {System.out.print(ch + " ");}System.out.println();//数组转换字符串char[] chars1 = {'w','o','r','l','d'};String s1 = new String(chars1);System.out.println(s1);}
}
运行截图:
4. 格式化
public class Test9 {public static void main(String[] args) {String s = String.format("%d-%d-%d",2024,11,29);System.out.println(s);}
}
运行截图:
4.3 字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
方法 | 功能 |
String replaceAll(String regex, String replacement) | 替换所有的指定内容 |
String replaceFirst(String regex, String replacement) | 替换首个内容 |
public class Test9 {public static void main(String[] args) {String s = "abccba";System.out.println(s.replaceAll("c", "_"));System.out.println(s.replaceFirst("c","-"));}
}
运行截图:
注意事项: 由于字符串是不可变对象, 替换不修改当前字符串, 而是产生一个新的字符串。
4.4 字符串拆分
可以将一个完整的字符串按照指定的分隔符划分为若干个子字符串。
方法 | 功能 |
String[] split(String regex) | 将字符串全部拆分 |
String[] split(String regex, int limit) | 将字符串以指定的格式,拆分为limit组 |
public class Test9 {public static void main(String[] args) {String s = "2024-11-29";String[] strings = s.split("-");for (String str :strings){System.out.print(str+" ");}System.out.println();String[] strings1 = s.split("-",2);for (String str : strings1){System.out.print(str+" ");}}
}
注意事项:
1. 字符"|","*","+"都得加上转义字符,前面加上"\\".
2. 而如果是"\",那么就得写成"\\\\".
3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
多次拆分:
public class Test9 {public static void main(String[] args) {String s = "name=zhangsan&age=18";String[] strings = s.split("&");for (String str : strings){String[] strings1 = str.split("=");System.out.println(strings1[0]+" "+strings1[1]);}}
}
输出截图:
4.5 字符串截取
从一个完整的字符串之中截取出部分内容。
方法 | 功能 |
String substring(int beginIndex) | 从指定索引截取到结尾 |
String substring(int beginIndex, int endIndex) | 截取部分内容 |
public class Test9 {public static void main(String[] args) {String s = "abcdefghijk";System.out.println(s.substring(5));System.out.println(s.substring(3, 6));//左闭右开}
}
运行截图:
注意事项:
1. 索引从0开始
2. 注意前闭后开区间的写法, substring(3, 6) 表示包含 3 号下标的字符, 不包含 6 号下标
4.6 其他操作
方法 | 功能 |
String trim() | 去掉字符串中的左右空格,保留中间空格 |
trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等).
public class Test9 {public static void main(String[] args) {String s = " hello \t\t";System.out.println(s);System.out.println(s.trim());}
}
运行截图:
五、StringBuilder和StringBuffer
因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下,因此:尽量避免对String的直接需要,如果要修改建议尽量使用StringBuffer或者StringBuilder。
public class Demo1 {public static void main(String[] args) {//获得毫秒级时间戳long start = System.currentTimeMillis();String s = "";for (int i = 0; i < 10000; i++) {s += i;}long end = System.currentTimeMillis();System.out.println(end - start);start = System.currentTimeMillis();StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < 1000; i++) {stringBuilder.append(i);}end = System.currentTimeMillis();System.out.println(end - start);}
}
运行截图:
由于String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。这两个类大部分功能是相同的。
方法 | 功能 |
StringBuff append(String str) | 在尾部追加,相当于String的+=,可以追加:boolean、char、char[]、 double、float、int、long、Object、String、StringBuff的变量 |
char charAt(int index) | 获取index位置的字符 |
int length() | 获取字符串的长度 |
int capacity() | 获取底层保存字符串空间总的大小 |
void ensureCapacity(int mininmumCapacity) | 扩容 |
void setCharAt(int index, char ch) | 将index位置的字符设置为ch |
int indexOf(String str) | 返回str第一次出现的位置 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始查找str第一次出现的位置 |
int lastIndexOf(String str) | 返回最后一次出现str的位置 |
int lastIndexOf(String str, int fromIndex) | 从fromIndex位置开始找str最后一次出现的位置 |
StringBuff insert(int offset, String str) | 在offset位置插入:八种基类类型 & String类型 & Object类型数据 |
StringBuffer deleteCharAt(int index) | 删除index位置字符 |
StringBuffer delete(int start, int end) | 删除[start, end)区间内的字符 |
StringBuffer replace(int start, int end, String str) | 将[start, end)位置的字符替换为str |
String substring(int start) | 从start开始一直到末尾的字符以String的方式返回 |
String substring(int start,int end) | 将[start, end)范围内的字符以String的方式返回 |
StringBuffer reverse() | 反转字符串 |
String toString() | 将所有字符按照String的方式返回 |
String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder的内容可 以修改。频繁修改字符串的情况考虑使用StringBuilder。
注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:
String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
StringBuilder变为String: 调用toString()方法。
相关文章:
《String类》
目录 一、定义与概述 二、创建字符串对象 2.1 直接赋值 2.2 使用构造函数 三、字符串的不可变性 四、常用方法 4.1 String对象的比较 4.1.1 比较是否引用同一个对象 4.1.2 boolean equals(Object anObject)方法:按照字典序比较 4.1.3 int compareTo(Strin…...
【docker】docker的起源与容器的由来、docker容器的隔离机制
Docker 的起源与容器的由来 1. 虚拟机的局限:容器的需求萌芽 在 Docker 出现之前,开发和部署软件主要依赖虚拟机(VMs): 虚拟机通过模拟硬件运行操作系统,每个应用程序可以运行在自己的独立环境中。虽然虚…...
Window 安装 Nginx
参考链接 Windows 环境nginx安装使用及目录结构详解_windows 安装nginx-CSDN博客 Nginx 安装及配置教程(Windows)【安装】_nginx下载安装-CSDN博客 安装 1)下载 nginx: download 2)解压 3)启动 3.1)方…...
replace (regexp|substr, newSubstr|function)替换字符串中的指定部分
replace 方法用于替换字符串中的指定部分。它可以接受一个子字符串或正则表达式作为第一个参数,第二个参数是替换的内容。 用法示例 基本替换 let str "Hello, world!"; let newStr str.replace("world", "everyone"); console.lo…...
【ROS2】Ubuntu22.04安装ROS humble
一. ROS简介 1.1 什么是ROS ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。ROS的核心思想就是将机器人的软件功能做…...
cesium 3Dtiles变量
原本有一个变亮的属性luminanceAtZenith,但是新版本的cesium没有这个属性了。于是 let lightColor 3.0result._customShader new this.ffCesium.Cesium.CustomShader({fragmentShaderText:void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial mate…...
配置泛微e9后端开发环境
配置泛微e9的后端开发环境 1.安装jdk1.8(请自行安装并设置环境变量) 2.将服务器上的WEARVER文件夹拷贝到开发环境下(其中要包含ecology和Resin目录) 3.通过idea创建一个基础Java项目,将jdk设置为1.8 4.添加依赖,需要将3个文件夹的所有jar包添加到项目中…...
【Stable Diffusion】安装教程
目录 一、python 安装教程 二、windows cuda安装教程 三、Stable Diffusion下载 四、Stable Diffusion部署(重点) 一、python 安装教程 (1)第一步下载 打开python下载页面,找到python3.10.9,点击右边…...
USB Type-C一线通扩展屏:多场景应用,重塑高效办公与极致娱乐体验
在追求高效与便捷的时代,启明智显USB Type-C一线通扩展屏方案正以其独特的优势,成为众多职场人士、娱乐爱好者和游戏玩家的首选。这款扩展屏不仅具备卓越的性能和广泛的兼容性,更能在多个应用场景中发挥出其独特的价值。 USB2.0显卡ÿ…...
【力扣】541.反转字符串2
问题描述 思路解析 每当字符达到2*k的时候,判断,同时若剩余字符>k,只对前k个进行判断(这是重点)因为字符串是不可变变量,所以将其转化为字符串数组,最后才将结果重新转变为字符串 字符串->字符数组 …...
什么是防抖与节流
防抖(Debouncing)与节流(Throttling) 在前端开发中,尤其是在处理用户输入、窗口调整大小、滚动事件等高频率触发的事件时,防抖和节流是两种常用的技术手段。它们可以帮助我们优化性能,减少不必…...
springboot vue 开源 会员收银系统 (12)购物车关联服务人员 订单计算提成
前言 完整版演示 http://120.26.95.195/ 开发版演示 http://120.26.95.195:8889/ 在之前的开发进程中,我们完成订单的挂单和取单功能,今天我们完成购物车关联服务人员,用户计算门店服务人员的提成。 1.商品关联服务人员 服务人员可以选择 一…...
FFmpeg 推流给 FreeSWITCH
FFmpeg 推流,貌似不难,网上有很多资料, 接到一个任务,推流给 FreeSWITCH,最开始以为很容易, 实则不然,FreeSWITCH uuid_debug_media <uuid>, 一直没人任何反应 仔细一查,Fr…...
.npmrc文件的用途
.npmrc 文件是 npm(Node.js 的包管理工具)用于配置项目或用户的设置文件。它可以存储与 npm 相关的配置信息,如注册表地址、认证信息、代理设置、安装路径等。.npmrc 文件可以出现在不同的地方,具有不同的作用范围,通常…...
C++游戏开发入门:如何从零开始实现自己的游戏项目?
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C游戏开发的相关内容! 关于【…...
Redis设计与实现第16章 -- Sentinel 总结1(初始化、主从服务器获取信息、发送信息、接收信息)
Sentinel是Redis的高可用解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主…...
Windows10+VirtualBox+Ubuntu:安装虚拟机VirtualBox,虚拟机中安装Ubuntu
一、需求 在Windows10系统中,安装虚拟机VirtualBox,VirtualBox中安装Ubuntu桌面版。 二、环境准备 系统环境 Windows10 内存:8G 虚拟化 虚拟机的运行,如果需要Windows系统开启虚拟化,可以通过BIOS设置。 “虚拟…...
Torchtune在AMD GPU上的使用指南:利用多GPU能力进行LLM微调与扩展
Torchtune on AMD GPUs How-To Guide: Fine-tuning and Scaling LLMs with Multi-GPU Power — ROCm Blogs 这篇博客提供了一份详细的使用Torchtune在AMD GPU上微调和扩展大型语言模型(LLM)的指南。Torchtune 是一个PyTorch库,旨在让您轻松地…...
C底层 函数栈帧
文章目录 一,什么是寄存器 二,栈和帧 前言 我们在学习c语言程序的时候,是不是有很多的疑问,如 1,为什么形参不可以改变实参 2,为什么我们编写程序的时候会出现烫烫烫......这个乱码 3,那些局…...
【模块一】kubernetes容器编排进阶业务容器化案例
Kubernetes 实战案例 Kubernetes实战案例-规划(基于nerdctl buildkitdcontainerd构建容器镜像) 业务容器化优势: ① 提高资源利用率、节约部署IT成本。 ② 提高部署效率,基于kubernetes实现微服务的快速部署与交付、容器的批量调度与秒级启动。 ③…...
可视化建模以及UML期末复习篇----相关软件安装
作为一个过来人,我的建议是别过来。 一、可视化建模 <1>定义: 官方:一种使用图形符号来表示系统结构和行为的建模技术。 我:其实说白了就是把工作流程用图形画出来。懂不? <2>作用: 提高理解和分析复杂系统的能力。促…...
Appflyer记录卸载事件
Appflyer官方文档 1.原理 1.AppsFlyer每天向Firebase Cloud Messaging(FCM)和 Apple Push Notification Services(APNS)发送一次API请求。 2.然后FCM和APNS会发送一条静默推送消息,用于判断用户设备上是否仍装有相关应…...
JDK17 AbstractQueuedSynchronizer 二 条件队列
条件队列 同步队列中的线程是为了争抢锁,而条件队列中的线程是主动释放锁,挂起自己,等条件满足时被别的线程唤醒,继续工作。 AQS里只有1个同步队列,但可以有多个等待队列,每个等待队列对应一个ConditionO…...
8 设计模式之简单工厂模式
设计模式是软件开发中的一套通用解决方案,而简单工厂模式则是最基础、最常用的一种创建型模式。在这篇博客中,我将为大家详细介绍简单工厂模式的概念、优缺点,以及通过一个饮料制作的案例,帮助大家更好地理解和应用这种模式。 一、…...
计算机的错误计算(一百六十九)
摘要 探讨 MATLAB 中一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然,每个 均为 0.5 . 下面看看 MATLAB 的计算结果。不妨不用循环语句,直接用算术表达式表示 这时计算结果在如下图片: …...
Android 图形系统之三:SurfaceControl
在 Android 系统中,SurfaceControl 是一个关键的类,用于管理应用窗口和屏幕上的显示内容。它与 SurfaceFlinger 紧密交互,通过 BufferQueue 提供高效的图形缓冲区管理能力。SurfaceControl 是 Android 的显示架构中不可或缺的部分,…...
Laravel8.5+微信小程序实现京东商城秒杀方案
一、商品秒杀涉及的知识点 鉴权策略封装掊口访问频次限制小程序设计页面防抖接口调用订单创建事务使用超卖防御 二、订单库存系统方案(3种) 下单减库存 优点是库存和订单的强一致性,商品不会卖超,但是可能导致恶意下单ÿ…...
Makefile 入门指南:构建自动化编译流程
个人主页:chian-ocean 文章专栏 前言 make 和 Makefile 是编译和构建软件项目时非常常用的工具和文件,它们通常配合使用来自动化项目的编译过程。 make 定义:make 是一个构建自动化工具,用于根据项目文件的依赖关系自动完成编译…...
C#热更原理与HybridCLR
一、Mono的诞生 在Mono之前,C#虽然很好,但是只在windows家族平台上使用,就这点C#与Java就无法比。于是微软公司向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。意味着只要你遵守CLI(Common Lang…...
里氏替换原则:Java面向对象设计的基石
在面向对象编程(OOP)中,继承是一个强大的工具,它允许我们创建新的类(子类)来复用和扩展现有类(父类)的功能。然而,继承也带来了复杂性,特别是在确保子类能够正…...
推百拉/长沙seo搜索
1. 接口设计分类 分为:模块或软件构件之间的接口设计、软件与其他软硬件系统之间的接口设计、软件与人之间的交互设计; 由穿越系统边界的数据流定义; 2. 人机交互界面,很重要; 3. 用户界面应具备的特性:…...
wordpress 注入 实战/自助发外链网站
示例展示 AOP(Aspect Oriented Programming),是面向切面编程的技术。AOP基于IoC基础,是对OOP的有益补充。AOP之所以能得到广泛认可,主要是因为它将应用系统拆分分了2个部分:核心业务逻辑及横向的通用逻辑,也就是所谓的…...
公司网站打不开是什么原因/seo搜索引擎优化服务
将程序安装内存对齐的方式读取到内存有两种方法: 1、内存映射文件 2、PE加载器模拟法 1、内存映射文件 lpHeader所指内存是只读的,尽管是PAGE_READWRITE // LoadPeWithMap.cpp : Defines the entry point for the console application. //#include &q…...
本机网站建设/杭州seo价格
如果问c的标准库里最缺乏的功能,正则表达式估计能排进前3,尤其在web开发领域,没有正则表达式实在令人太难受了,ruby,php人家都自带啊。成熟的c/c正则库不多,首选应该是boost中的正则库,但也意味着你要引入b…...
成都建设企业网站/媒体发布平台
Part.java package part;public class Part {String pName;//零件名字String pColor;//零件颜色int pQuantity;//零件数量public Part() {//默认构造函数this.pName"Y1524";this.pColor"red";this.pQuantity30;}public String getpName() {//获取零件名字r…...
上海最新发布最新发布/昆明自动seo
把产品、运营割裂开去谈关系,没有太大的意义。产品为用户提供解决方案,运营负责建立用户对产品的信任,用户从哪里来?市场为产品带来用户(流量)。我们来看下面这张图片:产品、运营、市场就像这棵树拧在一起一样…...