InputFilter 无法使第一个字符在点字符后保持大写
InputFilter fails to make first character keep uppercase after dots character
无法理解为什么当用户输入 "B.Com"
.
这样的学士格式时
我想得到 "B.com"
- c
字母是小写的。
但我得到:"B.Com"
- C
字母大写
这是我的代码:
InputFilter value = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned spanned, int dstart, int dend) {
for(int i = start; i < end; i++) {
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*")) {
return source.subSequence(0,1).toString().toUpperCase()+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
}
return null;
}
};
您当前在 for
语句中的代码可能会减少
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*"))
{
return source.subSequence(0,1).toString().toUpperCase()+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
在 if
语句中你有 source.subSequence(0,1).toString().toUpperCase()
,这与 letterOne
完全相同,所以我们可以减少一些代码
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*"))
{
return letterOne+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
现在可以清楚地看到 if
语句包含与方法中最后一个 return
相同的 return
,因此它可能会再次缩减为:
String letterOne = source.subSequence(0,1).toString().toUpperCase();
return letterOne + source.subSequence(1,end).toString().toLowerCase();
在上面的代码中你根本没有使用 i
,所以整个 for
语句是无用的并且 filter
可能被缩短为:
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned spanned, int dstart, int dend) {
if (start <= end) return null;
String letterOne = source.subSequence(0,1).toString().toUpperCase();
return letterOne + source.subSequence(1,end).toString().toLowerCase();
}
没有 .
-present 检查代码,除第一个字母外没有任何其他字母大写...您总是返回与 source
相同的 String
,首字母大写且所有字母都大写其他小写
您可以尝试使用 indexOf method for checking if dot is present in whole String sourceAsString
(convert from CharSequence source
), if yes then use split 方法来制作包含两个 String
的数组 - 将两个单词的首字母大写并加入它们 String properlyFormatted = firstWord + "." + secondWord;
PS。请注意 split
方法将 REGEX 作为参数,而 "."
在 REGEX 中表示“任何字母”,因此请像这样使用转义:split("\.")
无法理解为什么当用户输入 "B.Com"
.
我想得到 "B.com"
- c
字母是小写的。
但我得到:"B.Com"
- C
字母大写
这是我的代码:
InputFilter value = new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned spanned, int dstart, int dend) {
for(int i = start; i < end; i++) {
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*")) {
return source.subSequence(0,1).toString().toUpperCase()+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
}
return null;
}
};
您当前在 for
语句中的代码可能会减少
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*"))
{
return source.subSequence(0,1).toString().toUpperCase()+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
在 if
语句中你有 source.subSequence(0,1).toString().toUpperCase()
,这与 letterOne
完全相同,所以我们可以减少一些代码
String letterOne = source.subSequence(0,1).toString().toUpperCase();
if(Character.toString(source.charAt(i)).matches("[a-zA-Z.? ]*"))
{
return letterOne+source.subSequence(1,end).toString().toLowerCase();
}
return letterOne+source.subSequence(1,end).toString().toLowerCase();
现在可以清楚地看到 if
语句包含与方法中最后一个 return
相同的 return
,因此它可能会再次缩减为:
String letterOne = source.subSequence(0,1).toString().toUpperCase();
return letterOne + source.subSequence(1,end).toString().toLowerCase();
在上面的代码中你根本没有使用 i
,所以整个 for
语句是无用的并且 filter
可能被缩短为:
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned spanned, int dstart, int dend) {
if (start <= end) return null;
String letterOne = source.subSequence(0,1).toString().toUpperCase();
return letterOne + source.subSequence(1,end).toString().toLowerCase();
}
没有 .
-present 检查代码,除第一个字母外没有任何其他字母大写...您总是返回与 source
相同的 String
,首字母大写且所有字母都大写其他小写
您可以尝试使用 indexOf method for checking if dot is present in whole String sourceAsString
(convert from CharSequence source
), if yes then use split 方法来制作包含两个 String
的数组 - 将两个单词的首字母大写并加入它们 String properlyFormatted = firstWord + "." + secondWord;
PS。请注意 split
方法将 REGEX 作为参数,而 "."
在 REGEX 中表示“任何字母”,因此请像这样使用转义:split("\.")