打字稿中的 StringBuffer 等价物
StringBuffer equivalent in typescript
我正在尝试将 Dart 管道转换为打字稿,但打字稿中似乎没有 StringBuffer 的等效项。 Dart代码如下所示
.飞镖
@Pipe( name: 'titleCase' )
class TitleCasePipe extends PipeTransform {
dynamic transform( String value, List args ) {
StringBuffer buffer = new StringBuffer( );
if ( !isNull( value ) ) {
List<String> list = value.split( '' );
if ( value.startsWith( new RegExp( r"^[is]{1,2}([A-Z]|[0-9])" ) ) ) {
int start = 2;
List<String> sublist = list.sublist( start );
return sublist.join( '' );
}
for ( int i = 0; i < list.length; i++ ) {
if ( i == 0 ) {
buffer.write( list[i].toUpperCase( ) );
continue;
}
if ( isUppercase( list[i] ) ) {
buffer.write( ' ' );
buffer.write( list[i] );
continue;
}
buffer.write( list[i] );
}
}
return buffer.toString( );
}
}
字符串缓冲区的最佳替代品是什么,或者我如何才能最好地使用打字稿转换管道。
谢谢
我会使用数组
@Pipe({ name: 'titleCase'})
class TitleCasePipe extends PipeTransform {
transform(value:string, args:any[] ):any {
buffer:string[] = [];
if ( !isNull( value ) ) {
list:string[] = value.split( '' );
if ( value.match(/^[is]{1,2}([A-Z]|[0-9]).*/ ) ) {
start:number = 2;
sublist:string[] = list.slice( start );
return sublist.join( '' );
}
for (i = 0; i < list.length; i++ ) {
if ( i == 0 ) {
buffer.push( list[i].toUpperCase( ) );
continue;
}
if ( isUppercase( list[i] ) ) {
buffer.push( ' ' );
buffer.push( list[i] );
continue;
}
buffer.push( list[i] );
}
}
return buffer.join('');
}
}
(注意 - 未经测试)
TypeScript(和 JavaScript)中的字符串是可变的和可迭代的。
var foo = "How Brown Cow";
> undefined
foo[2]
> "w"
在字符串不可变的其他语言中,您需要特殊的 StringBuffer 或 StringBuilder 类型来进行连接或操作。使用 TypeScript,您可以使用简单的字符串类型执行此操作。
也就是说,您的 titleCase 管道似乎可以使用简单的正则表达式而不是命令式代码来实现。
How to convert "camelCase" to "Camel Case"?
@Pipe('titleCase')
export class TitleCase implements PipeTransform {
transform(value: string | null) {
if (!value) return;
return value
.replace(/([A-Z])/g, ' ')
.replace(/^./, s => s.toUpperCase());
}
}
需要注意的是Angular提供了titleCase管道
我正在尝试将 Dart 管道转换为打字稿,但打字稿中似乎没有 StringBuffer 的等效项。 Dart代码如下所示
.飞镖
@Pipe( name: 'titleCase' )
class TitleCasePipe extends PipeTransform {
dynamic transform( String value, List args ) {
StringBuffer buffer = new StringBuffer( );
if ( !isNull( value ) ) {
List<String> list = value.split( '' );
if ( value.startsWith( new RegExp( r"^[is]{1,2}([A-Z]|[0-9])" ) ) ) {
int start = 2;
List<String> sublist = list.sublist( start );
return sublist.join( '' );
}
for ( int i = 0; i < list.length; i++ ) {
if ( i == 0 ) {
buffer.write( list[i].toUpperCase( ) );
continue;
}
if ( isUppercase( list[i] ) ) {
buffer.write( ' ' );
buffer.write( list[i] );
continue;
}
buffer.write( list[i] );
}
}
return buffer.toString( );
}
}
字符串缓冲区的最佳替代品是什么,或者我如何才能最好地使用打字稿转换管道。
谢谢
我会使用数组
@Pipe({ name: 'titleCase'})
class TitleCasePipe extends PipeTransform {
transform(value:string, args:any[] ):any {
buffer:string[] = [];
if ( !isNull( value ) ) {
list:string[] = value.split( '' );
if ( value.match(/^[is]{1,2}([A-Z]|[0-9]).*/ ) ) {
start:number = 2;
sublist:string[] = list.slice( start );
return sublist.join( '' );
}
for (i = 0; i < list.length; i++ ) {
if ( i == 0 ) {
buffer.push( list[i].toUpperCase( ) );
continue;
}
if ( isUppercase( list[i] ) ) {
buffer.push( ' ' );
buffer.push( list[i] );
continue;
}
buffer.push( list[i] );
}
}
return buffer.join('');
}
}
(注意 - 未经测试)
TypeScript(和 JavaScript)中的字符串是可变的和可迭代的。
var foo = "How Brown Cow";
> undefined
foo[2]
> "w"
在字符串不可变的其他语言中,您需要特殊的 StringBuffer 或 StringBuilder 类型来进行连接或操作。使用 TypeScript,您可以使用简单的字符串类型执行此操作。
也就是说,您的 titleCase 管道似乎可以使用简单的正则表达式而不是命令式代码来实现。
How to convert "camelCase" to "Camel Case"?
@Pipe('titleCase')
export class TitleCase implements PipeTransform {
transform(value: string | null) {
if (!value) return;
return value
.replace(/([A-Z])/g, ' ')
.replace(/^./, s => s.toUpperCase());
}
}
需要注意的是Angular提供了titleCase管道