作者:明恋夏日2 | 来源:互联网 | 2023-08-28 18:47
我是编程的新手,在这里,我需要使用大写的用户输入,其中不包括某些单词。
例如,如果输入为
这是一项测试我得到了这是一项测试
但是,我要获取这是一种测试格式
String s = in.nextLine();
StringBuilder sb = new StringBuilder(s.length());
String wordSplit[] = s.trim().toLowerCase().split("\\s");
String[] t = {"is","but","a"};
for(int i=0;i if(wordSplit[i].equals(t))
sb.append(wordSplit[i]).append(" ");
else
sb.append(Character.toUpperCase(wordSplit[i].charAt(0))).append(wordSplit[i].substring(1)).append(" ");
}
System.out.println(sb);
}
这是我到目前为止获得的最接近的单词,但我似乎无法排除将特定单词大写的可能性。
您已经进行了一次迭代。再做一次;为Dim olApp As Outlook.Application
Dim olEmail As Outlook.MailItem
Dim olCal As Outlook.AppointmentItem
Dim olFolder As Outlook.Folder
Dim RequiredAttendee,OptionalAttendee,ResourceAttendee As Outlook.Recipient
Dim rtf() As Byte
Dim objOutlook As Object,objnSpace As Object,objFolder As MAPIFolder
Dim rngTo As Range
Dim rngCC As Range
Dim rngSUB As Range
Dim rngCALloc As Range
Dim rngCALstart As Range
Dim rngCALend As Range
Dim rngBody As Range
Dim myItem As Object
Dim oApp As Object
Dim oNameSpace As Namespace
Dim oFolder As Object
Sub SVN()
'Creates Outlook Calendar Site Visit Notification for one day onsite.'
Set olApp = New Outlook.Application
Set m = olApp.CreateItem(olMailItem)
Set appt = olApp.CreateItem(olAppointmentItem)
With ActiveSheet
Set rngTo = .Range("J3")
Set rngCC = .Range("J4")
Set rngCALloc = .Range("J5")
Set rngCALstart = .Range("J7")
Set rngCALend = .Range("J8")
Set rngSUB = .Range("J14")
End With
MsgBox "Verify Attendees: Customer,Sales,Service."
appt.MeetingStatus = olMeeting
appt.RequiredAttendees = rngTo.Value
appt.OptiOnalAttendees= rngCC.Value
appt.Subject = rngSUB.Value
appt.Location = rngCALloc.Value
appt.Start = rngCALstart.Value
appt.End = rngCALend.Value
appt.AllDayEvent = True
m.BodyFormat = olFormatHTML
m.HTMLBody = Range("J16").Value
m.GetInspector().WordEditor.Range.FormattedText.Copy
appt.GetInspector().WordEditor.Range.FormattedText.Paste
appt.Display
End Sub
中的每个字符串遍历t
中的每个字符串:
wordSplit
,
您的问题(由@sleepToken指出)是
if(wordSplit[i].equals(t))
正在检查当前单词是否等于包含您的关键字的数组。
相反,您要做的是检查数组是否包含给定的输入单词,例如:
if (Arrays.asList(t).contains(wordSplit[i].toLowerCase()))
请注意,没有“区分大小写” contains()
方法,因此在搜索之前将相关单词转换为小写很重要。
,
问题在于您正在将每个单词与整个数组进行比较。 Java不允许这样做,但实际上并没有多大意义。相反,您可以 循环数组中的每个单词并进行比较,但这在代码中有点冗长,而且如果单词数组变大,也不会很快。
相反,我建议从数组中创建一个Set
并检查它是否contains
这个词:
String[] t = {"is","but","a"};
Set t_set = new HashSet<>(Arrays.asList(t));
...
if (t_set.contains(wordSplit[i]) {
...
,
首先,要检查单词是否包含在数组中。
contains(word) {
for (int i = 0;i if ( word.equals(arr[i])) {
return true;
}
}
return false;
}
然后将您的条件wordSplit[i].equals(t)
更改为contains(wordSplit[i]
,
检查单词以排除java.util.ArrayList.contains()
方法将是更好的选择。
下面的表达式检查排除列表是否包含单词,如果不包含首字母,则大写:
tlist.contains(x) ? x : (x = x.substring(0,1).toUpperCase() + x.substring(1)))
该表达式还对应于:
if(tlist.contains(x)) { // ?
x = x; // do nothing
} else { // :
x = x.substring(0,1).toUpperCase() + x.substring(1);
}
或:
if(!tlist.contains(x)) {
x = x.substring(0,1).toUpperCase() + x.substring(1);
}
如果被允许使用Java 8:
String s = in.nextLine();
String wordSplit[] = s.trim().toLowerCase().split("\\s");
List tlist = Arrays.asList("is","a");
String result = Stream.of(wordSplit).map(x ->
tlist.contains(x) ? x : (x = x.substring(0,1).toUpperCase() + x.substring(1)))
.collect(Collectors.joining(" "));
System.out.println(result);
输出:
This is a Test
,
在此行if(wordSplit[i].equals(t))
中,您没有与代码中要忽略的每个单词进行比较
您可以执行以下操作:
public class Sample {
public static void main(String[] args) {
String s = "THIS IS A TEST";
String[] ignore = {"is","a"};
List toIgnoreList = Arrays.asList(ignore);
StringBuilder result = new StringBuilder();
for (String s1 : s.split(" ")) {
if(!toIgnoreList.contains(s1.toLowerCase())) {
result.append(s1.substring(0,1).toUpperCase())
.append(s1.substring(1).toLowerCase())
.append(" ");
} else {
result.append(s1.toLowerCase())
.append(" ");
}
}
System.out.println("Result: " + result);
}
}
输出为:
Result: This is a Test