有没有一种较短的方法来检查字符串/对象是否为空?
String str = someMethodThatReturnsStringOrNull(someOthreObject);
if(str == null) { System.out.println("Empty"); }
例如JS样式:
if(str) { System.out.println("Empty"); }
答案 0 :(得分:10)
否。
Java要求条件语句的表达式必须为#include<stdio.h>
#include<stdlib.h>
char* encrypt(char* input, char* key)
{
int keyLength = 0;
int inputLength = 0;
int i;
int j;
for(i = 0; key[i] != '\0'; i++) //Get the length of the key
{
keyLength++;
}
for(i = 0; input[i] != '\0'; i++) //Get the length of the input
{
inputLength++;
}
for (i = 0; i < keyLength; i++)
{
if(key[i] >= 'a' && key[i] <= 'z')
{
key[i] = key[i] - 'a' + 'A';
}
}
char* encryptedMessage = (char *)malloc((inputLength+1)*sizeof(char)); //Malloc for the encrypted message
char fixedKey[inputLength + 1];
if(inputLength < keyLength)
{
for(i =0; i < inputLength; i++)
{
fixedKey[i] = key[i];
}
}
for(i = 0, j = 0; i < inputLength; ++i, ++j) //If the key length is shorter than message length, loop the key to correct length
{
printf("Entered Loop\n");
if(j == keyLength)
j = 0;
fixedKey[i] = key[j];
}
fixedKey[i] = '\0';
for(i = 0; i < inputLength; ++i) //Encryption
{
if(input[i] == ' ')
{
encryptedMessage[i] = ' ';
continue;
}
encryptedMessage[i] = ((input[i] + fixedKey[i]) % 26) + 'A';
}
encryptedMessage[i] = '\0';
return encryptedMessage;
}
char* decrypt(char* input, char* key)
{
int keyLength = 0;
int inputLength = 0;
int i;
int j;
for(i = 0; key[i] != '\0'; i++) //Get the length of the key
{
keyLength++;
}
for(i = 0; input[i] != '\0'; i++) //Get the length of the input
{
inputLength++;
}
for (i = 0; i <keyLength; i++)
{
if(key[i] >= 'a' && key[i] <= 'z')
{
key[i] = key[i] - 'a' + 'A';
}
}
char* decryptedMessage = (char *)malloc((inputLength+1)*sizeof(char));
char fixedKey[inputLength + 1];
if(inputLength < keyLength)
{
for(i =0; i < inputLength; i++)
{
fixedKey[i] = key[i];
}
}
for(i = 0, j = 0; i < inputLength; ++i, ++j) //Fix the key length if needed
{
if(j == keyLength)
j = 0;
fixedKey[i] = key[j];
}
fixedKey[i] = '\0';
for(i = 0; i < inputLength; ++i) //Decryption
{
if(input[i] == ' ')
{
decryptedMessage[i] = ' ';
continue;
}
decryptedMessage[i] = (((input[i] - fixedKey[i]) + 26) % 26) + 'A';
}
decryptedMessage[i] = '\0';
return decryptedMessage;
}
int main()
{
char* encrypted = encrypt("The quick brown fox jumps over lazy dogs","key");
char* decrypted = decrypt(encrypted,"key");
printf("Encrypted string is: %s\nDecrypted String is: %s\n",encrypted,decrypted);
return 0;
}
类型,或者可以自动转换为boolean
的类型;只能通过拆箱转换为boolean
的唯一类型。
除非定义的名称短而无用的方法,否则不能使用更少的字符来完成此操作:
Boolean
但是这5个额外的字符节省了大量的认知负担,不知道“ if (n(str)) { // "n()" requires 3 characters
if (str == null) { // " == null" requires 8 characters
// (remove the whitespace if you want to do it in 6...)
到底是什么?!”,更不用说定义和/或导入该方法的其他字符了。另一方面,任何编写过Java(或可能是其他语言)的人都可以立即理解n
。
== null
精确地传达了您要测试的内容:该引用为空(而不是空),或者可以转换为值为零的数字,或其他。
str == null
还具有有益的编译时属性,例如它将阻止您使用原始操作数,例如== null
是编译时错误,因为int i = 0; if (i == null) {}
是原始的因此不能为i
,而可以使用null
(假设形式参数类型为if (n(i)) {}
,为了最大程度地重用,您希望它是Object
),因为}}将被装箱。
Java是一种相当冗长的语言;还有很多事情比这更冗长。就我个人而言,我什至不会注意到写i
,这就是我的肌肉记忆的条件。
别担心,要学会喜欢语法。