谢谢大家!
所以我的指示是:</ p>
方法名称:强调
参数:包含单词
的扫描仪对象返回值:一个字符串,其中一对星号之间的任何内容都是大写的
示例: emphasize(new Scanner("I am so *happy* right now! "))
应该返回I am so HAPPY right now!
注意:即使Scanner
对象不包含任何字词,您的方法也应该有效。
星号只会成对出现。永远不会有奇数的星号。
我认为第一步是将* *
之间的值作为上限返回。
public static String emphasize(Scanner bold)
{
String str = bold.nextLine();
String answer = str.substring(str.indexOf("(") + 1, str.indexOf("*"));
String caps = "";
return answer.toUpperCase();
}
是我到目前为止,但当我使用两个* *
来查找项目时,Java不喜欢它,它给了我各种错误。我可以做一个*和a)而不是两个,任何想法?
答案 0 :(得分:1)
我建议您使用regex
它会匹配需要更改为大写的所有字符
public static void main(String args[]){
System.out.println(emphasize(new Scanner("hello *Stack*overflow *again*")));
}
public static String emphasize(Scanner bold) {
String input = bold.nextLine();
Pattern p = Pattern.compile("(\\*)(.*?)(\\*)");
Matcher m = p.matcher(input);
while (m.find()) {
String matchedString = m.group().toString();
input = input.replace(matchedString, matchedString.substring(1, matchedString.length()-1).toUpperCase());
}
return input;
}
o / p:hello STACKoverflow AGAIN
我建议您使用Regex
匹配
答案 1 :(得分:1)
试试这个。
static Pattern EMP_PAT = Pattern.compile("\\*([^*]*)\\*|([^*]*)");
public static String emphasize(String s) {
StringBuilder sb = new StringBuilder();
Matcher m = EMP_PAT.matcher(s);
while (m.find())
sb.append(m.group(1) != null ? m.group(1).toUpperCase() : m.group(2));
return sb.toString();
}
答案 2 :(得分:0)
我认为这是有效的。但代码有点难看。
#include <iostream>
using namespace std;
void addition (int a[], int b[], int sizea, int sizeb, int result[]){
int carry = 0;
for(int i = 0; i < sizeof(a); i++)
{
if(a[i] + b[i] + carry == 0)
{
result[i] = 0;
carry = 0;
}
else if(a[i]+b[i]+carry==1)
{
result[i]=1;
carry=0;
}
else if(a[i] + b[i] + carry == 2)
{
result[i] = 0;
carry = 1;
}
else if(a[i] + b[i] + carry > 2)
{
result[i] = 1;
carry = 1;
}
}
result[0] = 0;
for (int i = 10; i > 0; i--){
cout << result[i];
}
cout << endl;
}
void initarray(int &sizea, int &sizeb, int a[], int b[]){
cout << "Enter size of a" << endl;
cin >> sizea;
cout << "Enter size of b" << endl;
cin >> sizeb;
cout << "enter contents of a " << sizea << endl;
for (int i = 0; i < sizea; i++){
cin >> a[i];
}
cout << "enter contents of b "<< sizeb << endl;
for (int z = 0; z < sizeb; z++){
cin >> b[z];
}
}
int main() {
int sizea, sizeb;
int* a = new int[sizea];
int* b = new int[sizeb];
int* result = new int [10];
initarray(sizea, sizeb, a, b);
addition(a, b, sizea, sizeb, result);
}
输入:
public static String emphasize(Scanner bold) {
String emphasizedSentence = "";
while (bold.hasNext()) {
String str = bold.nextLine();
if (str.contains("*")) {
String[] splitted = str.split("\\*");
for (int i = 0; i < splitted.length; i++) {
if (i % 2 == 1) {
str = str.replace("*" + splitted[i] + "*", splitted[i].toUpperCase());
}
}
emphasizedSentence = str;
}
}
return emphasizedSentence;
}
输出:
System.out.println(emphasize(new Scanner("hello *Stack*overflow")));
另一个输入: hello STACKoverflow
答案 3 :(得分:0)
这是这样做的一种方式。
public static String emphasize(Scanner bold) {
String str = "";
while(bold.hasNext()) {
String word = bold.next();
if (word.indexOf("*") != -1 && word.lastIndexOf("*") != -1) {
String answer = word.substring(word.indexOf("*")+1, word.lastIndexOf("*"));
str += " " + answer.toUpperCase() + " ";
} else {
str += " " + word + " ";
}
}
return str;
}
所以emphasize
方法可以使**大写之间的所有单词。您也可以使用正则表达式执行相同操作。
答案 4 :(得分:0)
你可以将 word 与正则表达式匹配,在java中你可以使用:
String text = "I am so *happy* right now!";
Matcher m = Pattern.compile("\\*+[A-Z]+\\*\\B").matcher(text);
答案 5 :(得分:0)
public static void main(String[] args) {
Scanner input= new Scanner(System.in);
String line=input.nextLine();
String output=Stream.of(line.split(" ")).flatMap(new Function<String, Stream<String>>() {
@Override
public Stream<String> apply(String s) {
if(s.startsWith("*") && s.endsWith("*")) {
return Stream.of(s.replace("*","").trim().toUpperCase());
}
return Stream.of(s);
}
}).collect(Collectors.joining(" "));
System.out.println(output);
}
<强>输出强>
我很生气*在*她*
我对她非常愤怒