найти подстроки внутри строки - PullRequest
0 голосов
/ 22 апреля 2010

Как мне найти подстроки внутри строки, а затем запомнить и удалить ее, когда я ее нашел.

Пример:

select * from (select a.iid_organizacijske_enote, 
       a.sifra_organizacijske_enote "Sifra OE", 
       a.naziv_organizacijske_enote "Naziv OE", 
       a.tip_organizacijske_enote "Tip OE" 

Я бы хотел, чтобы все слова были внутри "", поэтому

  • Сифра О.Е.
  • Назив О.Е.
  • TIP OE

и возврат

select * from (select a.iid_organizacijske_enote, 
       a.sifra_organizacijske_enote,
       a.naziv_organizacijske_enote, 
       a.tip_organizacijske_enote

я пытаюсь с регулярным выражением, indexOf() но никто не работает нормально

Ответы [ 4 ]

3 голосов
/ 22 апреля 2010

String.replace(..) * * 1004

Заменяет каждую подстроку этой строки, которая соответствует литеральной целевой последовательности указанной литеральной последовательностью замены. Замена продолжается от начала строки до конца, например, замена «aa» на «b» в строке «aaa» приведет к «ba», а не «ab».

str = str.replace(wordToRemove, "");

Если вы не знаете слов заранее, вы можете использовать версию регулярного выражения :

str = str.replaceAll("\"[^\"]+\"", "");

Это означает, что все строки, начинающиеся и заканчивающиеся кавычками, с любым символом, кроме кавычек между ними, будут заменены пустой строкой.

1 голос
/ 22 апреля 2010

Я попробовал и создал функцию, как показано ниже - она ​​работает нормально и возвращает желаемый результат

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            string s =  p.mystring("select * from (select a.iid_organizacijske_enote, a.sifra_organizacijske_enote 'Sifra OE', "
        +"a.naziv_organizacijske_enote 'Naziv OE', "+
       "a.tip_organizacijske_enote 'Tip OE'");
        }


        public string mystring(string s)
        {
            if (s.IndexOf("'") > 0)
            {
                string test = s.Substring(0, s.IndexOf("'"));
                s = s.Replace(test+"'", "");

                s = s.Remove(0, s.IndexOf("'") + 1);
                test = test.Replace("'", "");
                test = test + s;
                return mystring(test);
            }
            else
            {
                return s;
            }
        }
    }
}
1 голос
/ 22 апреля 2010

Рассмотрите возможность использования регулярных выражений с группами захвата.С классом Java Matcher вы можете найти первое совпадение, а затем использовать replaceFirst (String).

- EDIT -

(не эффективно для длинных входов):

String in = "hello \"there\", \"friend!\"";
Pattern p = Pattern.compile("\\\"([^\"]*)\\\"");
Matcher m = p.matcher(in);
while(m.find()){
    System.out.println(m.group(1));
    in = m.replaceFirst("");
    m = p.matcher(in);
}
System.out.println(in);
0 голосов
/ 18 октября 2016

лучший и оптимизированный код здесь:

    public static void main(String[] args){
    int j =0;
    boolean substr = true;
    String mainStr = "abcdefgh";
    String ipStr = "efg";
    for(int i=0 ; i < mainStr.length();i++){
        if(j<ipStr.length() && mainStr.charAt(i)==ipStr.charAt(j)){
            j++;
        }               
    }
    if(j>=0 && j !=ipStr.length()){
        substr = false;
    }
    System.out.println("its a substring:"+substr);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...