Cách tìm lần xuất hiện thứ hai của một ký tự trong chuỗi trong JavaScript

Hàm sẽ trả về giá trị mới nếu việc loại bỏ subStr khỏi chuỗi thành công, nếu không, nó sẽ trả về -1 trong mọi trường hợp

Ví dụ -

const str = 'drsfgdrrtdr';
console.log[str.removeStr['dr', 3]];

Sản lượng dự kiến ​​-

'drsfgdrrt'

Hãy viết mã cho điều này -

Ví dụ

const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function[subStr, num]{
   if[!this.includes[subStr]]{
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for[; ;end < this.length]{
      if[this.substring[start, end] === subStr]{
         occurences++;
      };
      if[occurences === num]{
         return this.substring[0, start] + this.substring[end,
         this.length];
      };
      end++;
      start++;
   }
   return -1;
}
String.prototype.removeStr = removeStr;
console.log[str.removeStr[subStr, num]];

đầu ra

Đầu ra cho mã này trong bảng điều khiển sẽ là -

drsfgrtdr

Hiểu mã -

  • Hàm removeStr[] trước tiên kiểm tra nếu không có một lần xuất hiện của subStr thì chúng ta nên thoát ra và trả về -1

  • Sau đó, nó sử dụng thuật toán cửa sổ trượt để ghi lại số lần xuất hiện của subStr trong chuỗi [kích thước của cửa sổ bằng độ dài của subStr]

  • Ban đầu, chúng tôi bắt đầu từ cửa sổ ngoài cùng bên trái, sau đó chúng tôi tiếp tục trượt cửa sổ của mình cho đến khi cuối cửa sổ chạm đến cuối chuỗi ban đầu

  • Nếu theo cách của chúng tôi, số lần xuất hiện bằng với số lần xuất hiện được yêu cầu, chúng tôi sẽ cắt bớt lần xuất hiện đó khỏi chuỗi và trả về chuỗi mới do đó thu được

  • Nếu chúng ta lặp qua toàn bộ chuỗi, điều đó có nghĩa là không có đủ số lần xuất hiện của subStr trong chuỗi và trong trường hợp đó, chúng ta nên trả về -1 và thoát khỏi hàm

Cuối cùng, chúng ta thêm thuộc tính removeStr vào String. nguyên mẫu để chúng ta có thể gọi nó là một hàm chuỗi

Tôi đang làm việc với mã javascript để tìm lần xuất hiện thứ n của một ký tự trong chuỗi. Sử dụng hàm

'drsfgdrrt'
6, chúng tôi có thể nhận được lần xuất hiện đầu tiên của ký tự. Bây giờ thách thức là có được lần xuất hiện thứ n của ký tự. Tôi đã có thể nhận được lần xuất hiện thứ ba thứ hai, v.v. bằng cách sử dụng mã được cung cấp bên dưới

function myFunction[] {
  var str = "abcdefabcddesadfasddsfsd.";

  var n = str.indexOf["d"];
  document.write["First occurence " +n ];

  var n1 = str.indexOf["d",parseInt[n+1]];
  document.write["Second occurence " +n1 ];

  var n2 = str.indexOf["d",parseInt[n1+1]];
  document.write["Third occurence " +n2 ];

  var n3 = str.indexOf["d",parseInt[n2+1]];
  document.write["Fourth occurence " +n3];

  // and so on ...
}

Kết quả được đưa ra dưới đây

First occurence 3 
Second occurence 9 
Third occurence 10 
Fourth occurence 14 
Fifth occurence 18 
Sixth occurence 19

Tôi muốn khái quát hóa tập lệnh để tôi có thể tìm thấy lần xuất hiện thứ n của ký tự vì đoạn mã trên yêu cầu chúng tôi lặp lại tập lệnh n lần. Hãy cho tôi biết nếu có một phương pháp tốt hơn hoặc thay thế để làm điều tương tự. Sẽ thật tuyệt nếu chúng ta chỉ đưa ra sự xuất hiện [trong thời gian chạy] để lấy chỉ mục của ký tự đó

Thêm một số tiện ích mở rộng hữu ích cho kiểu Chuỗi trong Dart, để tìm xem một chuỗi có chứa chuỗi khác nhiều lần không

Gần đây tôi đã gặp sự cố này khi đang làm việc trên Shortcut Keeper, ứng dụng Flutter dành cho máy tính để bàn của tôi

Tôi cần tìm cách kiểm tra xem một chuỗi như “Command-K Command-T” có chuỗi con “Command” nhiều lần hay không và nếu có thì chuỗi con thứ hai bắt đầu xuất hiện từ chỉ mục nào

Để giải quyết vấn đề này, cuối cùng tôi đã viết một vài phương thức mở rộng đơn giản cho kiểu Chuỗi của Dart, điều này có thể hữu ích cho bất kỳ ai gặp phải vấn đề này

vấn đề chung

Nói cách khác, chúng ta cần tìm

1] Nếu một chuỗi chứa một chuỗi khác [

'drsfgdrrt'
7] nhiều lần và

2]

'drsfgdrrt'
8 nơi có thể tìm thấy lần xuất hiện thứ hai này

Sau đó, chúng tôi có thể mở rộng điều này hơn nữa để có thể tìm thấy các vị trí xảy ra lần thứ n của

'drsfgdrrt'
7

Tất nhiên, chúng ta cũng có thể giải quyết vấn đề này bằng các biểu thức chính quy [thông qua lớp RegExp của Dart], nhưng tôi thích cách dễ đọc hơn được trình bày ở đây

Dung dịch

Tìm sự xuất hiện thứ hai của một chuỗi con

Tiện ích mở rộng mà tôi đã kết thúc là một tiện ích khá đơn giản

extension SecondOccurenceOfSubstring on String {
  int secondIndexOf[String stringToFind] {
    if [indexOf[stringToFind] == -1] return -1;
    return indexOf[stringToFind, indexOf[stringToFind] + 1];
  }
  bool hasSecondOccurence[String stringToFind] {
    return secondIndexOf[stringToFind] != -1;
  }
}

Ở đây, chúng tôi tận dụng tham số tùy chọn thứ hai [

const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function[subStr, num]{
   if[!this.includes[subStr]]{
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for[; ;end < this.length]{
      if[this.substring[start, end] === subStr]{
         occurences++;
      };
      if[occurences === num]{
         return this.substring[0, start] + this.substring[end,
         this.length];
      };
      end++;
      start++;
   }
   return -1;
}
String.prototype.removeStr = removeStr;
console.log[str.removeStr[subStr, num]];
0] của phương thức
const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function[subStr, num]{
   if[!this.includes[subStr]]{
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for[; ;end < this.length]{
      if[this.substring[start, end] === subStr]{
         occurences++;
      };
      if[occurences === num]{
         return this.substring[0, start] + this.substring[end,
         this.length];
      };
      end++;
      start++;
   }
   return -1;
}
String.prototype.removeStr = removeStr;
console.log[str.removeStr[subStr, num]];
1 từ thư viện cốt lõi của Dart, để đặt vị trí bắt đầu tìm kiếm chuỗi từ đó. Nếu không tìm thấy chuỗi, chúng tôi trả về -1 thông thường

Phương thức

String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21
0 là một cách thuận tiện để kiểm tra xem một chuỗi con có xuất hiện nhiều lần trong chuỗi được cung cấp hay không

Sau đó chúng ta có thể chỉ cần sử dụng nó như thế này

String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21

Điều này hoạt động rất tốt, vì vậy chúng tôi có thể tiến thêm một bước và xây dựng tiện ích mở rộng tổng quát hơn, để tìm vị trí của bất kỳ sự xuất hiện nào của chuỗi con trong chuỗi

Tìm sự xuất hiện thứ n của một chuỗi con

Bây giờ, chúng tôi muốn cung cấp một phương thức, chẳng hạn như chúng tôi có thể tìm chỉ mục của lần xuất hiện thứ tư [n = 4] của một chuỗi con trong một chuỗi

String s3 = "Give it away give it away give it away give it away give it away now";
s3.nThIndexOf["away", 4]; // Returns 47

Trong ví dụ trên, chuỗi con

String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21
1 thứ tư có thể được tìm thấy sau 47 ký tự trong chuỗi cung cấp của chúng tôi
String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21
2

Chúng ta có thể sử dụng phần mở rộng này để làm điều đó

'drsfgdrrt'
2

Một lần nữa, chúng tôi áp dụng chiến lược tương tự như trên, với phương pháp

const str = 'drsfgdrrtdr';
const subStr = 'dr';
const num = 2;
removeStr = function[subStr, num]{
   if[!this.includes[subStr]]{
      return -1;
   }
   let start = 0, end = subStr.length;
   let occurences = 0;
   for[; ;end < this.length]{
      if[this.substring[start, end] === subStr]{
         occurences++;
      };
      if[occurences === num]{
         return this.substring[0, start] + this.substring[end,
         this.length];
      };
      end++;
      start++;
   }
   return -1;
}
String.prototype.removeStr = removeStr;
console.log[str.removeStr[subStr, num]];
1, để tiến gần hơn mỗi lần đến lần xuất hiện thứ n mà chúng tôi muốn. Để giúp hiểu rõ hơn, đây là những gì xảy ra trong phương thức
String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21
4 khi chúng ta gọi nó bằng
String s1 = "Command-K Command-T";
s1.secondIndexOf["Command"]; // Returns 10
s1.hasSecondOccurence["Command"]; // Returns true
s1.secondIndexOf["Control"]; // Returns -1
s1.hasSecondOccurence["Control"]; // Returns false
String s2 = "Give it away give it away give it away now";
s2.secondIndexOf["away"]; // Returns 21
5

Dưới đây là một số ví dụ khác sử dụng tiện ích mở rộng này

'drsfgdrrt'
5

Giờ đây, chúng tôi có thể dễ dàng sử dụng các tiện ích mở rộng chuỗi này ở bất cứ đâu chúng tôi cần loại chức năng này trong mã Dart của mình

Làm cách nào để tìm lần xuất hiện thứ hai của một ký tự trong chuỗi Java?

Chúng tôi được cung cấp một chuỗi, chẳng hạn như "itiswhatitis" và một chuỗi con, chẳng hạn như "is". Tôi cần tìm chỉ mục của 'i' khi chuỗi "là" xuất hiện lần thứ hai trong chuỗi gốc. Chuỗi. indexOf["is"] sẽ trả về 2 trong trường hợp này

Làm cách nào để tìm số lần xuất hiện của một ký tự trong chuỗi trong JavaScript?

match[] Một trong những giải pháp có thể được cung cấp bởi hàm match[], được sử dụng để tạo tất cả các lần xuất hiện của một chuỗi trong một mảng. Bằng cách đếm kích thước mảng trả về số lần chuỗi con xuất hiện trong một chuỗi.

Làm cách nào để lấy chỉ mục cuối cùng thứ hai của chuỗi trong JavaScript?

Để lấy hai ký tự cuối cùng của một chuỗi trong JavaScript, gọi phương thức slice[] trên chuỗi, chuyển -2 làm đối số. For example, str. slice[-2] returns a new string containing the last two characters of str .

Làm cách nào để lấy ký tự thứ n trong một chuỗi trong JavaScript?

Để lấy ký tự thứ n trong Chuỗi, bạn có thể sử dụng phương thức charAt[] của Chuỗi . phương thức chatAt[] chấp nhận chỉ mục làm đối số và trả về ký tự tại chỉ mục đã cho. Nếu chỉ mục nằm ngoài giới hạn của chuỗi, phương thức charAt[] trả về Chuỗi rỗng.

Chủ Đề