shell中截取字符串的方法有很多中,
${expression}一共有9种使用方法。
${parameter:-word}
${parameter:=word}
${parameter:word}
${parameter:+word}
上面4种可以用来进行缺省值的替换。
${#parameter}
上面这种可以获得字符串的长度。
${parameter%word} 最小限度从后面截取word
${parameter%%word} 最大限度从后面截取word
${parameter#word} 最小限度从前面截取word
${parameter##word} 最大限度从前面截取word
上面4个就是用来截取字符串的方法了。
有了着四种用法就不必使用cut命令来截取字符串了
第一种又可以分为四种情况,下面一一介绍。
1、使用 # 号 *** 作符。用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。用法为#substr,例如:
str='>
abaabcac
前两个固定01,
第三个a前面是'ab',从左起最大子串'a'不等于从右起起最大子串'b',所以为0+1=1
第四个a前面是'aba',从左起最大子串'ab'不等于从右起起最大子串'ba',继续往下找'a'='a',所以1+1=2
第五个b前面是'abaa',,'aba'不等于'baa','ab'不等于'aa','a'='a',所以1+1=2
第六个c前面是'abaab','abaa'不等于'baab','aba'不等于'aab','ab'='ab',所以1+2=3
依次类推,next='01122312'
ababaaab
按上述求得next='01123422',给序列上标号
第一位next=0,所以第一位的nextval=0
第二位next=1,所以第二位b与第一位a比较,a不等于b,所以第二位的nextval=next=1
第三位next=1,所以第三位a与第一位a比较,a等于a,所以第三位的nextval=第一位的next=0
依次类推
但是注意,第五位next=3,所以第五位a与第三位a比较,a等于a,但是按照上面算第三位的时候,求得第三位和第一位相等,所以第五位的nextval=第一位的next=0
例如:aaaab
public class StringTest4 {
/
@param args
/
public static void main(String[] args) {
/
需求4:两个字符串的最大相同子串。
"sadfcctvghjkl"
"zxcctvcv"
思路:
1,以短的字符串为主。
到长的字符串中去判断是否存在,如果存在,已找到。
2,如果没有找到。将短的字符串的长度递减获取子串继续到长的串中查找。只要找到就结束。
3,没有找到,说明没有相同的。
/
String s1 = "sadfcctvghjkl";
String s2 = "zxcctvcv";
String maxSub = getMaxSubString(s2,s1);
Systemoutprintln("maxsub="+maxSub+" length="+maxSublength());
}
public static String getMaxSubString(String s1, String s2) {
//确定哪个是长的哪个是短的。
String longStr,shortStr;
longStr = s1length()>s2length()s1:s2;
shortStr = s1equals(longStr)s2:s1;
// Systemoutprintln("long:"+longStr);
// Systemoutprintln("short:"+shortStr);
//对短的字符串 *** 作,从短串中取子串,到长字符串中判断,是否存在。
for(int x=0; x<shortStrlength(); x++){
for(int y=0,z=shortStrlength()-x; z<=shortStrlength(); y++,z++){
//根据y,z,获取子串。
String temp = shortStrsubstring(y,z);
// Systemoutprintln(temp);
if(longStrcontains(temp))
return temp;
}
}
return null;
}
}
string str;
cin >> str; //输入字符串
string::size_type len = strsize(); //获取长度
int n = 5;
string sub_left = strsubstr(0, n); //从左边获取n长度子串
string sub_right = strsubstr(n); //从右边获取n长度子串
string sub = strsubstr(2, 5); //指定开始位置和长度,获取子串
string::size_type pos = strfind('a', 0); //判断字符a是否在字符串中,返回位置
reverse(strbegin(), strend()); //字符串反转
transform(strbegin(), strend(), strbegin(), ::toupper); //转换为大写
以上就是关于shell中取字符串子串的几种方式全部的内容,包括:shell中取字符串子串的几种方式、动态规划(最大乘积连续子串和最大和连续子串)、数据结构模式匹配的题,求解!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)