在Java中用**获取文本

时间:2016-02-04 04:42:38

标签: java string

谢谢大家!

所以我的指示是:<​​/ 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)而不是两个,任何想法?

6 个答案:

答案 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);

}

<强>输出

我很生气*在*她*

我对她非常愤怒