Java 获取和跳过字符串组?

Java 获取和跳过字符串组?,java,python,c++,string,Java,Python,C++,String,我用了几种语言处理字符串,然后有一件事困扰着我,那就是如何从字符串中选择字符或片段(子字符串)。就像我们可以从字符串或特定位置的字符中获取子字符串一样,但我找不到任何方法或运算符,它们返回特定长度的特定片段,跳过特定字符。下面是解释 因此,假设我有以下字符串:我是一个示例字符串。从这个字符串中,我希望能够获得长度为2的字符串组,并跳过某些字符,比如3。现在,为了让事情更有趣,让我们假设我可以从任何索引开始,在本例中,我们将使用5。因此,我应该从上述条件中获得以下字符串:anam sng。下图(*

我用了几种语言处理字符串,然后有一件事困扰着我,那就是如何从字符串中选择字符或片段(子字符串)。就像我们可以从字符串或特定位置的字符中获取子字符串一样,但我找不到任何方法或运算符,它们返回特定长度的特定片段,跳过特定字符。下面是解释

因此,假设我有以下字符串:
我是一个示例字符串。
从这个字符串中,我希望能够获得长度为
2
的字符串组,并跳过某些字符,比如
3
。现在,为了让事情更有趣,让我们假设我可以从任何索引开始,在本例中,我们将使用
5
。因此,我应该从上述条件中获得以下字符串:
anam sng
。下图(
*
用于take,
用于skip)

我知道您可以使用计数变量来实现,这些变量跟踪每个字符是否使用
if
条件。但我在想一种数学方法,或者甚至是一些语言中的内置方法或运算符,可以完成这项工作


我还搜索了Regex是否可以完成这项工作。但是什么都想不出来。

正则表达式可以做到。你只需要再努力一点:)


Python没有这种切片,必须使用循环。但你可以用一个理解列表:

text = 'I am a sample string'

s = 5  # start position
l = 2  # slice length
d = 3  # distance between slices

chunks = [text[p:p + l] for p in range(s, len(text),  l + d]
result = ''.join(chunks)
使用正则表达式,您可以匹配组中的两个长度字符串和三个长度字符串

import re

regex = r'(..)...'

found = re.findall(regex, text[s:])  # list of tuples
result = ''.join(f[0] for f in found)

一般解决方案:当第一组替换所有出现的regex
(.{0,n})。{0,m}
时,跳过第一个
start
字符

Python:

import re

input = 'I am an example string.'
n = 2
m = 3
start = 5

print(re.sub('(.{0,%d}).{0,%d}' % (n, m), "\\1", input[start:]))
爪哇:

C++11:

string input = "I am an example string.";
int n = 2;
int m = 3;
int start = 5;

stringstream s;
s << "(.{0," << n << "}).{0," << m << "}";
regex r(s.str());
cout << regex_replace(input.substr(start), r, "$1");
string input=“我是一个示例字符串。”;
int n=2;
int m=3;
int start=5;
细绳;
s
import re

regex = r'(..)...'

found = re.findall(regex, text[s:])  # list of tuples
result = ''.join(f[0] for f in found)
import re

input = 'I am an example string.'
n = 2
m = 3
start = 5

print(re.sub('(.{0,%d}).{0,%d}' % (n, m), "\\1", input[start:]))
final String input = "I am an example string.";
final int n = 2;
final int m = 3;
final int start = 5;

final String regex = String.format("(.{0,%d}).{0,%d}", n, m);
System.out.println(input.substring(start).replaceAll(regex, "$1"));
string input = "I am an example string.";
int n = 2;
int m = 3;
int start = 5;

stringstream s;
s << "(.{0," << n << "}).{0," << m << "}";
regex r(s.str());
cout << regex_replace(input.substr(start), r, "$1");