我有两个要比较的字符串
String st1 = "database-2.0/version\"25-00\"";
String st2 = "database2.0version25";
我想确定st1是否包含st2。在提供的示例中,我希望得到Yes作为答案,因为st2中的字符顺序相同是st1,它只缺少一些字符。 Java库中的任何函数都做这样的比较吗?我知道st1.indexOf(st2)
和st1.contains(st2)
,但在这种情况下它们不起作用,都返回false。
答案 0 :(得分:2)
试试这个:
String regex = st2.chars()
.mapToObj(i -> String.valueOf((char) i))
.map(str -> ".*+?^${}()|[]\\".contains(str) ? "\\" + str : str)
.collect(Collectors.joining(".*", ".*", ".*"));
boolean contains = st1.matches(regex);
这是一个纲要:
获取较短字符串的正则表达式字符串(在我们的案例中为st2
- 硬编码 - 您可以自动执行此操作),在前后添加.*
以及在每个字符之间添加.*
。 (String.chars()
匹配任何字符的0或更多)。
IntStream
返回String
,将其转换为 var backButtonImage: UIImage = UIImage(named: "backButton")!
UINavigationBar.appearance().backIndicatorImage = backButtonImage
UINavigationBar.appearance().backIndicatorTransitionMaskImage = backButtonImage
if #available(iOS 11, *) {
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(-300, 0), for:UIBarMetrics.default)
} else {
UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -200), for:UIBarMetrics.default)
}
,类型为
正如@Robert建议的那样,用反斜杠转义特殊字符。
检查较长的字符串匹配,这有效意味着它包含短字符串的所有字符,可能还有更多。
答案 1 :(得分:0)
您可以按顺序查找needle
个字符,在字符串haystack
中找到子序列needle
,从您找到的索引searchFrom
开始每个连续的角色。
在以下代码中,请注意haystack.indexOf(needleChar, searchFrom)
从needleChar
中的索引searchFrom
开始返回第一次出现haystack
的索引。
boolean contains(String haystack, String needle) {
int searchFrom = 0;
for (char needleChar : needle.toCharArray()) {
searchFrom = haystack.indexOf(needleChar, searchFrom);
if (searchFrom == -1) {
return false;
}
}
return true;
}
答案 2 :(得分:0)
您要找的是子序列,而不是子串。
这是我在geeksforgeeks上找到的工作解决方案:
// Recursive Java program to check if a string
// is subsequence of another string
import java.io.*;
class SubSequence
{
// Returns true if str1[] is a subsequence of str2[]
// m is length of str1 and n is length of str2
static boolean isSubSequence(String str1, String str2, int m, int n)
{
// Base Cases
if (m == 0)
return true;
if (n == 0)
return false;
// If last characters of two strings are matching
if (str1.charAt(m-1) == str2.charAt(n-1))
return isSubSequence(str1, str2, m-1, n-1);
// If last characters are not matching
return isSubSequence(str1, str2, m, n-1);
}
// Driver program
public static void main (String[] args)
{
String str1 = "database2.0version25";
String str2 = "database2.0/version\"2-00\"";
int m = str1.length();
int n = str2.length();
boolean res = isSubSequence(str1, str2, m, n);
if(res)
System.out.println("Yes");
else
System.out.println("No");
}
}
// Contributed by Pramod Kumar