2017-01-10 5 views
-5

Как отменить весь абзац в input_1, кроме слов в input_2? Выход должен быть, как это ....java Строка на основе обратного

String input_1="this is me.is this is me"; 
String input_2="is,me"; 

String output="me is siht is.me is siht"; 
+4

Вы пробовали что-нибудь? –

+2

Добро пожаловать в переполнение стека! Пользователи здесь обычно предпочитают отвечать на вопросы, которые показывают, что автор уже пробовал :) – TrojanByAccident

+0

Покажи нам что-нибудь! – abhiarora

ответ

0

Неясно, как ваш вопрос заключается в вводе синтаксиса выражений, я отвечу на него, предполагая, что вы вводите вторую строку (String input_2, как в вашем фрагменте кода), в виде списка всех слов, которые не должны быть отменены, разделенные запятые. Это решение рабочего кода для вашего вопроса, как я его понял. Простите мой отступ и форматирование, поскольку я написал его на VIM в одно мгновение.

import java.io.*; 
public class SelectReverse 
{ 
public static void main(String args[]) throws IOException 
{ 
    BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); 
    System.out.println("Enter the string to be selectively reversed"); 
    String str = buf.readLine(); 
    str = str.trim(); 
    str = " ".concat(str); 
    int len = str.length(); //length of first input string 
    System.out.println("Enter the words to be left intact during reversal"); 
    String s = buf.readLine(); 
    int l = s.length();  //length of second input string 
    int j = 0; 
    int k = len-1;   //stores index upto which substring is extracted 
    int wordcount = 1; 
    String result = ""; //stores output string 
    for(int i = 0; i<l; i++)  //counts no. of words which are not to be reversed 
    { 
     if(s.charAt(i) == ',')           
     { 
      wordcount++; 
     } 
    } 
    String arr[] = new String[wordcount]; //array of words not to be reversed 
    int counter = 0; 
    for(int i = 0; i<l; i++)           
    { 
     if(s.charAt(i) == ',') 
     { 
      String subs = s.substring(j, i); //extracting individual words from list of words not to be reversed 
      arr[counter] = subs; //adding them in the array 
      j = i+1; 
      counter++; 
     } 
    } 
    arr[counter] = s.substring(j); //adding last word (after the last comma) 
    boolean firstflag = false; 
    for(int i = len-1; i>=0; i--) 
    {   
     String substr; 
     if(str.charAt(i)==' ' || str.charAt(i)=='.') 
     { 
      if(firstflag == false) //substring is extracted till end of string only for the first extracted word 
      { 
       substr = str.substring(i+1); 
       firstflag = true; 
       k = i; 
      } 
      else 
      { 
       substr = str.substring(i+1, k); 
       k = i; 
      }   
      boolean flag = false; 
      for(int m = 0; m<wordcount; m++) 
      { 
       if(arr[m].equalsIgnoreCase(substr))//true if substring is not to be reversed, i.e. matches with any word in array 
       {     
        flag = true; 
       } 
      } 
      if(flag == true) //concatenating substring to output string without reversing 
      { 
       result = result+substr; 
       result = result+" "; 
      } 
      else //concatenating substring to output string after reversing 
      { 
       String reverse = ""; 
       int ln = substr.length(); 
       for(int n = ln-1; n>=0; n--) //reversing substring 
       { 
        char ch = substr.charAt(n); 
        String chstring = Character.toString(ch); 
        reverse = reverse+chstring; 
       } 
       result = result+reverse; 
       result = result+" "; 
      }   
     } 
    }  
    System.out.println(result); //displaying resultant output string 
    } 
} 

Это должно решить вашу проблему. Для получения дополнительных вопросов, пожалуйста, будьте более конкретными в отношении синтаксиса ввода, регулярного выражения и оператора проблемы. Вы также можете использовать метод .split (String, delimiter) для создания массива подстрок в String, разделенных разделителем, но я продемонстрировал реализацию метода для ясности и понимания базового уровня.

0

Используйте следующий пример для справки: -

public class ReverseWords { 
    public static void main(String[] args) { 
     String input1 = "this is me.is this is me"; 
     String input2 = "is,me"; 
     String output = ""; 

     String[] wordsFromInput1 = input1.split("[\\s.]"); 
     String[] wordsFromInput2 = input2.split(","); 

     for (String tempWord1 : wordsFromInput1) { 
      boolean existInSecond = false; 
      for (String tempWord2 : wordsFromInput2) { 
       if (tempWord1.equals(tempWord2)) { 
        existInSecond = true; 
        break; 
       } 
      } 
      if (existInSecond) { 
       output += tempWord1 + " "; 
      } else { 
       output += new StringBuffer(tempWord1).reverse() + " "; 
      } 
     } 

     System.out.println(output.trim()); 
    } 
} 

Вы должны узнать больше о регулярном выражении и строка функций обработки для работы на таких примерах обработки строк.

Смежные вопросы