
今天实现string类的一些功能,包括字符串匹配和求子串。
1.程序1. 实例域
public static final int MAX_LENGTH = 10; int length; char[ ] data;
2. 构造器
实现两个构造器,第一个用于生成空串,第二个用于根据给出的串生成对应的字符串。
public MyString( ) {
length = 0;
data = new char[ MAX_LENGTH ];
} // Of the first constructor
public MyString( String paraString ) {
data = new char[ MAX_LENGTH ];
length = paraString.length( );
//Copy data.
for( int i = 0; i < length; i++ ) {
data[ i ] = paraString.charAt( i );
} // Of for i
} // Of the second constructor
3. toString
public String toString( ) {
String resultString = "";
for( int i = 0; i < length; i++ ) {
resultString += data[ i ];
} // Of for i
return resultString;
} // Of toString
4. locate
即字符串匹配,依次枚举所有子串与模式串进行比对,最后返回匹配的子串在主串中的第一个位置。
public int locate( MyString paraMyString ) {
boolean tempMatch = false;
for( int i = 0; i < length - paraMyString.length + 1; i++ ) {
//Initialize.
tempMatch = true;
for( int j = 0; j < paraMyString.length; j++ ) {
if( data[ i + j ] != paraMyString.data[ j ] ) {
tempMatch = false;
break;
} // Of if
} // Of for j
if( tempMatch ) {
return i;
} // Of if
} // Of for i
return -1;
} // Of locate
时间复杂度:
O
(
m
n
)
O( mn )
O(mn),其中m,n分别为主串和模式串长度。
5. substring
即返回主串中给定起始位置和长度的子串。
public MyString substring( int paraStartPosition, int paraLength ) {
if( paraStartPosition + paraLength > length ) {
System.out.println("The bound is exceed.");
return null;
} // Of if
MyString resultMyString = new MyString( );
resultMyString.length = paraLength;
for( int i = 0; i < paraLength; i++ ) {
resultMyString.data[ i ] = data[ paraStartPosition + i ];
} // Of for i
return resultMyString;
} // Of substring
6. 测试
测试代码如下:
public static void main( String args[ ] ) {
MyString tempFirstString = new MyString("I like it.");
MyString tempSecondString = new MyString("ik");
int tempPosition = tempFirstString.locate( tempSecondString );
System.out.println("The position of "" + tempSecondString + "" in "" + tempFirstString + "" is: " + tempPosition);
MyString tempThirdString = new MyString("ki");
tempPosition = tempFirstString.locate(tempThirdString);
System.out.println("The position of "" + tempThirdString + "" in "" + tempFirstString
+ "" is: " + tempPosition);
tempThirdString = tempFirstString.substring(1, 2);
System.out.println("The substring is: "" + tempThirdString + """);
tempThirdString = tempFirstString.substring(5, 5);
System.out.println("The substring is: "" + tempThirdString + """);
tempThirdString = tempFirstString.substring(5, 6);
System.out.println("The substring is: "" + tempThirdString + """);
} // Of main
结果如下: