我想知道如何做出以下决定?
答案 0 :(得分:2)
您可以使用contains
自己测试前两个:
/* 1 */ System.out.println("".contains(""));
/* 2 */ System.out.println("abc".contains(""));
true true
关于你的上一个问题,似乎类似于要求空集的排列有多少?,答案是0! = 1
- 即是,空集是一个自身的排列,因此在数学意义上,空字符串可以被认为是自身的排列。
答案 1 :(得分:1)
我不知道你想要置换的实现是什么,但总的来说,是的,基于empty是空子集的事实,你应该期望空字符串是另一个空字符串的有效排列。
String foo = "hello!";
String bar = "world";
String baz = "";
String qux = "wor";
String ipsem = "";
System.out.println(foo.contains(bar)); //false
System.out.println(foo.contains(baz)); //true
System.out.println(baz.contains(foo)); //false
System.out.println(bar.contains(qux)); //true
System.out.println(baz.contains(ipsem)); //true
答案 2 :(得分:1)
使用Junit编写一些真正的测试!
另外要小心interned Strings,最后一次测试isNotConsideredIdenticalVariable
需要一个停止编译器优化的技巧(即自动实习)。
import org.junit.Assert;
import org.junit.Test;
public class EmptyStringTest {
@Test
public void isConsideredSubstringOfEmpty() throws Exception
{
Assert.assertTrue("".contains(""));
}
@Test
public void isConsideredSubstringOfNonEmpty() throws Exception
{
Assert.assertTrue("NOT EMPTY".contains(""));
}
@Test
public void isConsideredEqual() throws Exception
{
Assert.assertEquals("", "");
}
@Test
public void isConsideredIdenticalLiteral() throws Exception
{
Assert.assertTrue("" == "");
}
@Test
public void isNotConsideredIdenticalVariable() throws Exception
{
String firstInstance = "a".replaceAll("a", "");
String differentInstance = "";
Assert.assertFalse(differentInstance == firstInstance);
}
}
答案 3 :(得分:1)
由于您使用标记“java”来询问此问题,我假设您指的是String
类型。
Java空String
可以被视为另一个空或非空String的子字符串......在某种意义上它可以使用String.substring()
生成。 (并非所有空的String实例都可以通过这种方式生成,但如果您使用equals
比较字符串,那就不相关......)
Java String
API未定义permute
操作。这意味着我们不能说它是如何表现的。问题的第二部分是无法回答的。
如果你在谈论字符串是什么的其他模型,那么答案取决于完全在模型上。
如果您(实际上)就如何建模字符串提出建议......那么我认为您的问题无法回答。同样,Answers将取决于您如何定义字符串模型的 rest 。
但如果您需要我的建议,那么您需要考虑如何使用字符串模型。字符串的子串集合包含原始字符串是否有用?对于包含原始字符串的字符串排列集是否有用?有什么逻辑后果......
最后,this Wikipedia page包括字符串的“形式理论”。对于我的非数学家来说,它看起来不错,但该页面并未引用任何与正式理论部分相关的参考文献。