精华内容
下载资源
问答
  • 判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题。 java中判断字符串是否相等有两种方法: 1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";...

    判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题。

    java中判断字符串是否相等有两种方法:

    1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如:String a="abc";String b="abc",

    那么a==b将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存

    一份,所以a和b指向的是同一个对象;再比如:String a=newString("abc"); String b=new String("abc");

    那么a==b将返回false,因为a和b指向不同的对象。

    2、用equals方法,该方法比较的是字符串的内容是否相同,比如:String a=newString("abc"); 

    String b=new String("abc");a.equals(b);将返回true。所以通常情况下,为了避免出现上述问题,判断

    字符串是否相等使用equals方法。

    展开全文
  • 判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在Java中可能会带来问题。 java中判断字符串是否相等有两种方法: 1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";...

    判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在Java中可能会带来问题。

    java中判断字符串是否相等有两种方法:

    1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",

    那么a==b将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存

    一份,所以a和b指向的是同一个对象;再比如:String a=new String("abc"); String b=new String("abc");

    那么a==b将返回false,因为a和b指向不同的对象。

    2、用equals方法,该方法比较的是字符串的内容是否相同,比如:String a=new String("abc"); 

    String b=new String("abc"); a.equals(b);将返回true。所以通常情况下,为了避免出现上述问题,判断

    字符串是否相等使用equals方法。

    转载于:https://www.cnblogs.com/del88/p/6434525.html

    展开全文
  • java中判断字符是否相等

    千次阅读 2017-11-30 09:49:57
    判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题。 java中判断字符串是否相等有两种方法: 1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";...

    判断字符串相等我们经常习惯性的写上if(str1==str2),这种写法在java中可能会带来问题。

    java中判断字符串是否相等有两种方法:

    1、用“==”运算符,该运算符表示指向字符串的引用是否相同,比如: String a="abc";String b="abc",

    那么a==b将返回true。这是因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存

    一份,所以a和b指向的是同一个对象;再比如:String a=new String("abc"); String b=new String("abc");

    那么a==b将返回false,因为a和b指向不同的对象。

    2、用equals方法,该方法比较的是字符串的内容是否相同,比如:String a=new String("abc"); 

    String b=new String("abc"); a.equals(b);将返回true。所以通常情况下,为了避免出现上述问题,判断

    字符串是否相等使用equals方法。

    展开全文
  • 2018-11-26 15:50:09
    两个串相等是指串长度相同并且各对应位置上的字符也相同。两个串的大小由对应位置上的首个不同字符的大小决定,字符比较次序是从头开始依次向后。当两个串的长度不等而对应位置上的字符都相同时较长的串定义为较大;...

    串的基本概念

    字符串也叫串,是由字符组成的有限序列,是一种常用的非数值数据;

    两个串相等是指串长度相同并且各对应位置上的字符也相同。两个串的大小由对应位置上的首个不同字符的大小决定,字符比较次序是从头开始依次向后。当两个串的长度不等而对应位置上的字符都相同时较长的串定义为较大;

    通常采用顺序存储结构存储。

    串的抽象数据类型描述

    public interface IString {
    	public void clear();//将字符串置成空串
    	
    	public boolean isEmpty();//判断是否为空串
    	
    	public int length();//返回串的长度     
    	                                                                                   
    	public char charAt(int i) throws Exception;//读取并返回串中第i个数据元素
    	
    	public void allocate(int newCapacity);//扩充字符串存储空间容量为newCapacity
    	
    	public IString subString(int begin,int end);//返回位序号从begin到end-1的子串
    	
    	public void insert(int i,IString str) throws Exception;//在第i个字符之前插入子串str
    	
    	public void delete(int begin,int end);//删除位序号从begin到end-1的子串
    	
    	public void concat(IString str) throws Exception;//将str连接到字符串的后面
    	
    	public int compareTo(IString str) throws Exception;//比较str和当前字符串的大小
    	
    	public int indexOf(IString str,int begin);//从位序号为begin的字符开始搜索与str相等的子串
    
    }
    

    串的Java接口的实现方法主要有以下两种:

    1. 基于顺序存储的实现:顺序串;
    2. 基于链式存储的实现:链串;

    顺序串

    顺序串与顺序表的逻辑结构相同,存储结构类似,均可用数组来存储数据元素。但串具有独特的不同于线性表的操作,属于特殊类型的线性表。
    在这里插入图片描述

    public class SqString implements IString{
    	private char[] strValue;//字符数组存放串值
    	private int curLen;//当前串的长度
    	
    	//构造空串
    	public SqString(){
    		strValue=new char[0];
    		curLen=0;
    	}
    	
    	//以字符串常量构造串
    	public SqString(String str){
    		char[] p=str.toCharArray();
    		strValue=p;
    		curLen=p.length;
    	}
    	
    	//以字符数组构造串
    	public SqString(char[] str){
    		strValue=new char[str.length];
    		for(int i=0;i<str.length;i++){
    			strValue[i]=str[i];
    		}
    		curLen=str.length;
    	}
    	
    	//将串变为空串
    	public void clear() {
    		curLen=0;
    	}
    	
    	//判断是否为空串
    	public boolean isEmpty() {
    		return curLen==0;
    	}
    	
    	//返回串的长度
    	public int length() {
    		return curLen;
    	}
    	
    	//返回位序号为i的字符
    	public char charAt(int i) throws Exception {
    		if(i<0||i>=curLen)
    			throw new StringIndexOutOfBoundsException(i);
    		return strValue[i];
    	}
    	
    	//将串的长扩充为newCapacity
    	public void allocate(int newCapacity) {
    		char[] tmp=strValue;
    		strValue=new char[newCapacity];
    		for(int i=0;i<tmp.length;i++){
    			strValue[i]=tmp[i];
    		}		
    	}
    	
    	//返回位序号从begin到end-1的子串
    	public IString subString(int begin, int end) {
    		if(begin<0||begin>=end||end>curLen)//判断参数是否合法
    			throw new StringIndexOutOfBoundsException("参数不合法");
    		char []tmp=new char[end-begin];
    		for(int i=begin;i<end;i++)//复制子串
    			tmp[i-begin]=strValue[i];
    		return new SqString(tmp);
    	}
    	
    	//在第i个字符之前插入子串str
    	public void insert(int i, IString str) throws Exception {
    		if(i<0||i>curLen)//判断参数i是否合法
    			throw new StringIndexOutOfBoundsException("插入位置不合法");
    		int len=str.length();
    		int newCapacity=len+curLen;
    		allocate(newCapacity);//重新分配存储空间
    		for(int j=curLen-1;j>=i;j--){//移动数据元素
    			strValue[j+len]=strValue[j];
    		}
    		for(int j=i;j<i+len;j++){//插入
    			strValue[j]=str.charAt(j-i);
    		}
    		curLen=newCapacity;
    	}
    	
    	//删除位序号从begin到end-1的子串
    	public void delete(int begin, int end) {
    		if(begin<0||end>curLen||begin>=end){//判断参数是否合法
    			throw new StringIndexOutOfBoundsException("参数不合法");
    		}
    		for(int i=begin;i<=end-1;i++){//向前移动元素
    			strValue[i]=strValue[i+end-begin];
    		}
    		curLen=curLen-end+begin;
    	}
    	
    	//将str连接到字符串的后面
    	public void concat(IString str) throws Exception {
    		insert(curLen,str);
    	}
    	
    	//比较str和当前字符串的大小
    	public int compareTo(IString str) throws Exception {
    		int n=Math.min(curLen,str.length());
    		for(int i=0;i<n;i++){
    			if(strValue[i]>str.charAt(i))
    				return 1;
    			if(strValue[i]<str.charAt(i))
    				return -1;
    		}
    		return 0;
    	}
    		
    	public int[] next(IString p) throws Exception{
    		int[] next=new int[p.length()];
    		int k=0;
    		next[0]=-1;
    		next[1]=0;
    		for(int i=2;i<p.length();i++){//对串中的每个字符求next值
    			if(p.charAt(i-1)==p.charAt(k)){//匹配
    				next[i]=next[i-1]+1;
    				k++;
    			}
    			else if(k==0){
    				next[i]=0;
    			}
    			else {//未匹配
    				k=next[k];
    			}
    		}
    		return next;
    	}
    	
    	public int KMP(IString p,int begin) throws Exception{
    		int[] next=next(p);//计算next值
    		int j=0;
    		for(int i=0;i<=curLen-p.length();){//i为主串的字符指针
    			if(j==-1||strValue[i]==p.charAt(j)){//比较的字符相等或者比较主串的下一个字符
    				i++;
    				j++;
    			}
    			else {//比较的字符不等
    				j=next[j];
    			}
    			if(j==p.length()-1)//匹配
    				return i-p.length();
    		}
    		return -1;
    		
    	}
    	
    	@Override
    	public int indexOf(IString str, int begin) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    }
    

    顺序串基本操作的实现

    1:求字串操作
    步骤:

    1. 检查参数 begin 和 end 是否满足 0<=begin<=n-1 和 begin<end<=n,若不满足抛出异常;
    2. 返回序列号为 begin 到 end-1 的字符串序列;
        //返回位序号从begin到end-1的子串
    	public IString subString(int begin, int end) {
    		if(begin<0||begin>=end||end>curLen)//判断参数是否合法
    			throw new StringIndexOutOfBoundsException("参数不合法");
    		char []tmp=new char[end-begin];
    		for(int i=begin;i<end;i++)//复制子串
    			tmp[i-begin]=strValue[i];
    		return new SqString(tmp);
    	} 
    

    2:插入操作
    步骤:

    1. 判断参数 i 是否满足 0<=i<=n,若不满足,则抛出异常;
    2. 重新分配存储空间为 n+m,m为插入的字符串 str 的长度;
    3. 将第 i 个及之后的数据元素向后移动 m 个存储单元;
    4. 将 str 插入到字符串从 i 开始的位置;
        //在第i个字符之前插入子串str
    	public void insert(int i, IString str) throws Exception {
    		if(i<0||i>curLen)//判断参数i是否合法
    			throw new StringIndexOutOfBoundsException("插入位置不合法");
    		int len=str.length();
    		int newCapacity=len+curLen;
    		allocate(newCapacity);//重新分配存储空间
    		for(int j=curLen-1;j>=i;j--){//移动数据元素
    			strValue[j+len]=strValue[j];
    		}
    		for(int j=i;j<i+len;j++){//插入
    			strValue[j]=str.charAt(j-i);
    		}
    		curLen=newCapacity;
    	}
    

    3:删除操作
    步骤:

    1. 判断参数 begin 和 end 是否满足 0<=begin<=curLen-1 和 begin<end<=curLen,若不满足,则抛出异常;
    2. 将字符串位序号为 end 的数据元素及其之后的数据元素向前移动到位序号为 begin 的位置;
    3. 将字符串的长度减小 end-begin ;
        //删除位序号从begin到end-1的子串
    	public void delete(int begin, int end) {
    		if(begin<0||end>curLen||begin>=end){//判断参数是否合法
    			throw new StringIndexOutOfBoundsException("参数不合法");
    		}
    		for(int i=begin;i<=end-1;i++){//向前移动元素
    			strValue[i]=strValue[i+end-begin];
    		}
    		curLen=curLen-end+begin;
    	}
    

    4:连接操作
    concat(IString str) 是将串 str 插入到字符串的尾部,此时调用 insert(curLen,str) 即可实现:

        //将str连接到字符串的后面
    	public void concat(IString str) throws Exception {
    		insert(curLen,str);
    	}
    

    5:比较操作
    步骤:

    1. 确定需要比较的字符的个数 n 为两个字符串长度的较小值;
    2. 从下标 0 至 n-1 依次进行比较;
        //比较str和当前字符串的大小
    	public int compareTo(IString str) throws Exception {
    		int n=Math.min(curLen,str.length());
    		for(int i=0;i<n;i++){
    			if(strValue[i]>str.charAt(i))
    				return 1;
    			if(strValue[i]<str.charAt(i))
    				return -1;
    		}
    		return 0;
    	}
    

    链串

    链串采用链式存储结构。链串由一系列大小相同的结点组成,每个结点用数据域存放字符,指针域存放指向下一个结点的指针。

    每个结点的数据域可以是一个字符或者多个字符。若每个结点的数据域为一个字符,这种链表称为单字符链表;若每个结点的数据域为多个字符,则称为块链表。

    在块链表中的每个结点的数据域不一定被字符占满,可通过添加空字符或者其他非串值字符来简化操作。
    在这里插入图片描述

    串的链式存储结构中,单字符链表的插入、删除操作较为简单,但存储效率低。

    块链表虽然存储效率较高,但插入、删除操作需要移动字符,较为复杂。此外,与顺序串相比,链串需要从头部开始遍历才能访问某个位置的元素。

    展开全文
  • 在判断一个字符类型的变量是否与某字符时相等,你可能写下这样一行代码 if (activityType == @"0"){} //activityType某一个变量名 然后你会得到这样一行黄色提醒 Fixing “direct comparison of a string ...
  • 为什么Java判断字符串相等不能用== 首先,我们所说的两个字符串是否相等,是指字符串字面量是否相等,如果使用==来判断两个字符串是否相等,那么实际比较的是两个字符串的存储地址(即内存地址)是否相等.那么如果使用==来...
  • 字符

    2019-10-01 19:39:21
    1、串的基本概念 从逻辑结构来看,串是一种特殊的线性表,即串可以看成是每个数据元素仅有一个字符组成的线性表。...l 串相等是指两个串的长度相等,并且各个对应位置的字符相同。 2、串的抽象数据类型描述...
  • 更多内容,欢迎关注公众号:Swift花园原文链接:猫克杯:[极速Swift...操作符那些看起来像数学符号的玩意,比如+和-。Swift中有大量的操作符。下面有一些测试用的变量(这里特指数学里的变量,不局限于Swift...
  • 本文主要介绍shell脚本的一些基本用法以及在前端项目中的应用。将围绕以下几点来展开: 1.... shell基本介绍及用法 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,业界所说的 shell 通常都是指 she...
  • 首先大家知道,String既可以作为一个对象来使用,又可以...,而作为一个对象来使用,则是指通过new关键字来创建一个新对象,比如String s = new String("Hello")。但是它的内部动作其实还是创建了一个对...
  • 1.常量池 在编译期确定,并被保存在已编译的字节码文件中的一些数据,它包括类、方法、接口等中的常量,也包括字符常量。2.==: 比较是否同一个对象3.equals(): 比较的对象里的内容----------------...
  • 本文的代码示例从键盘输入两个字符,然后借助操作指令 CMPSB 进行判断。 CMPSB 指令的功能:用DS:[SI]所的字节单元内容减去ES:[DI]所字节单元内容,并且根据指令执行结果设置标志位,然后根据DF的内容...
  • 编辑距离,两个字符之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括:(1)将一个字符替换成另一个字符,(2)插入一个字符,(3)删除一个字符。 相似度,等于“编辑距离+1...
  • 给定程序中函数fun的功能:逐个比较p、q所两个字符对应位置的字符,把ASCII值大或相等的字符以此存放到c所的数组中,形成一个新的字符。 #define _CRT_SECURE_NO_WARNINGS #include #include void ...
  • 42%等级:11已帮助:6336人你用的应该不是python3吧,麻烦你告诉我你用的python的版本不好意思,不过我要说,你说s.attrib.get('dirname')==dirname怎么着也检测不出来 是什么意思,是指这个判断总是为False吗?...
  • 在本题中,匹配是指字符串的所有字符匹配整个模式(也就是说两个字符串相等)。 例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。 答案 当模式中的第二个字符不是“”时: 1、如果...
  • 置换的意思,通过改变顺序可以使得两个字符串相等。 样例: "abc" 为 "cba" 的置换。 "aabc" 不是 "abcc" 的置换。 Java代码: 字符串a,b的每一个字符都哈希到一个map里,a的字符加1,b...
  • 题目 输入一个字符,按字典序打印出该字符中字符的所有排列。例如输入字符abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符...重点还有两个字母相等时,要注意重复的问题: private static boolean IsSwap
  • 回文是指顺读和反读内容均相同的字符,例如”121”,”ABBA”,”X”等。本实例将编写函数判断字符是否是回文。引入两个指针变量,开始时,两个指针分别指向字符的首末字符,当两个指针所指字符相等时,两个指针...
  • 顺序和链

    2020-07-26 14:24:10
    串相等: 当且仅当两个串的长度相等并且对应位置上个的字符都相同时,这两个串才相等的。所有的空串都相等的 子串:一个串中任意个连续字符组成的子序列(含空串)称为该串的子串,例如"abcd"的子串有""(空串)...
  • 在本题中,匹配是指字符的所有字符匹配整个模式。例如,字符"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配 思路 利用动态规划 如果两个字符相等,或者匹配的那个字符是‘.’,那么是否匹配,...
  • 大概思路:将字符串的每一个字符进栈,然后在出栈,这个时候出栈以后的字符串顺序刚好和原字符串顺序相反,当出栈后的字符串和原字符串相等,那么这个字符串为回文。 根据思路写方法 // 测试字符串时候回文 public...
  • 第5章 串;... 2几个术语 1长度串中字符个数称为串长度 2空串长度为零字符串称为空串 3空格串由一个或多个连续空格组成串称为空格串 4串相等两个串是相等是指两个串长度相等且对应字符都相等 5子串串中任意

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 636
精华内容 254
热门标签
关键字:

串相等是指